《深入理解C++11:C++ 11新特性解析与应用》——导读
前 言
為什么要寫這本書
相比其他語言的頻繁更新,C++語言標準已經(jīng)有十多年沒有真正更新過了。而上一次標準制定,正是面向?qū)ο蟾拍铋_始盛行的時候。較之基于過程的編程語言,基于面向?qū)ο蟆⒎盒途幊痰雀拍畹腃++無疑是非常先進的,而C++98標準的制定以及各種符合標準的編譯器的出現(xiàn),又在客觀上推動了編程方法的革命。因此在接下來的很多年中,似乎人人都在學習并使用C++。商業(yè)公司在邀請C++專家為程序員講課,學校里老師在為學生繪聲繪色地講解面向?qū)ο缶幊?#xff0c;C++的書籍市場也是百花齊放,論壇、BBS的C++板塊則充斥了大量各種關(guān)于C++的討論。隨之而來的,招聘啟事寫著“要求熟悉C++編程”,派生與繼承成為了面試官審視畢業(yè)生基礎(chǔ)知識的重點。凡此種種,不一而足。于是C++語言“病毒性”地蔓延到各種編程環(huán)境,成為了使用最為廣泛的編程語言之一。
十來年的時光轉(zhuǎn)瞬飛逝,各種編程語言也在快馬加鞭地向前發(fā)展。如今流行的編程語言幾乎無一不支持面向?qū)ο蟮母拍睢<词故枪爬系恼Z言,也通過了制定新標準,開始支持面向?qū)ο缶幊獭kS著Web開發(fā)、移動開發(fā)逐漸盛行,一些新流行起來的編程語言,由于在應(yīng)用的快速開發(fā)、調(diào)試、部署上有著獨特的優(yōu)勢,逐漸成為了這些新領(lǐng)域中的主流。不過這并不意味著C++正在失去其陣地。身為C的“后裔”,C++繼承了C能夠進行底層操作的特性,因此,使用C/C++編寫的程序往往具有更佳的運行時性能。在構(gòu)建包括操作系統(tǒng)的各種軟件層,以及構(gòu)建一些對性能要求較高的應(yīng)用程序時,C/C++往往是最佳選擇。更一般地講,即使是由其他語言編寫的程序,往往也離不開由C/C++編寫的編譯器、運行庫、操作系統(tǒng),或者虛擬機等提供支持。因此,C++已然成為了編程技術(shù)中的中流砥柱。如果用個比喻來形容C++,那么可以說這十來年C++正是由“鋒芒畢露”的青年時期走向“成熟穩(wěn)重”的中年時期。
不過十來年對于編程語言來說也是個很長的時間,長時間的沉寂甚至會讓有的人認為,C++就是這樣一種語言:特性穩(wěn)定,性能出色,易于學習而難于精通。長時間使用C++的程序員也都熟悉了C++毛孔里每一個特性,甚至是現(xiàn)實上的一些細微的區(qū)別,比如各種編譯器對C++擴展的區(qū)別,也都熟稔于心。于是這個時候,C++11標準的橫空出世,以及C++之父Bjarne Stroustrup的一句“看起來像一門新語言”的說法,無疑讓很多C++程序員有些誠惶誠恐:C++11是否又帶來了編程思維的革命?C++11是否保持了對C++98及C的兼容?舊有的C++程序到了C++11是否需要被推倒重來?
事實上這些擔心都是多余的。相比于C++98帶來的面向?qū)ο蟮母锩?#xff0c;C++11帶來的卻并非“翻天覆地”式的改變。很多時候,程序員保持著“C++98式”的觀點來看待C++11代碼也同樣是合理的。因為在編程思想上,C++11依然遵從了一貫的面向?qū)ο蟮乃枷?#xff0c;并深入加強了泛型編程的支持。從我們的觀察來看,C++11更多的是對步入“成熟穩(wěn)重”的中年時期的C++的一種改造。比如,像auto類型推導這樣的新特性,展現(xiàn)出的是語言的親和力;而右值引用、移動語義的特性,則著重于改變一些使用C++程序庫時容易發(fā)生的性能不佳的狀況。當然,C++11中也有局部的創(chuàng)新,比如lambda函數(shù)的引入,以及原子類型的設(shè)計等,都體現(xiàn)了語言與時俱進的活力。語言的諸多方面都在C++11中再次被錘煉,從而變得更加合理、更加條理清晰、更加易用。 C++11對C++語言改進的每一點,都呈現(xiàn)出了經(jīng)過長時間技術(shù)沉淀的編程語言的特色與風采。所以從這個角度上看,學習C++11與C++98在思想上是一脈相承的,程序員可以用較小的代價對C++的知識進行更新?lián)Q代。而在現(xiàn)實中,只要修改少量已有代碼(甚至不修改),就可以使用C++11編譯器對舊有代碼進行升級編譯而獲得新標準帶來的好處,這也非常具有實用性。因此,從很多方面來看,C++程序員都應(yīng)該樂于升級換代已有的知識,而學習及使用C++11也正是大勢所趨。
在本書開始編寫的時候,C++11標準剛剛發(fā)布一年,而本書出版的時候,C++11也只不過才誕生了兩年。這一兩年,各個編譯器廠商或者組織都將支持C++11新特性作為了一項重要工作。不過由于C++11的語言特性非常的多,因此本書在接近完成時,依然沒有一款編譯器支持C++11所有的新特性。但從從業(yè)者的角度看,C++11遲早會普及,也遲早會成為C++程序員的首選,因此即使現(xiàn)階段編譯器對C++新特性的支持還不充分,但還是有必要在這個時機推出一本全面介紹C++11新特性的中文圖書。希望通過這樣的圖書,使得更多的中國程序員能夠最快地了解C++11新語言標準的方方面面,并且使用最新的C++11編譯器來從各方面提升自己編寫的C++程序。
IBM XL編譯器中國開發(fā)團隊
目 錄
[第1章 新標準的誕生
1.1 曙光:C++11標準的誕生](https://yq.aliyun.com/articles/173855/)
1.1.1 C++11/C++0x(以及C11/C1x)—新標準誕生
1.1.2 什么是C++11/C++0x
1.1.3 新C++語言的設(shè)計目標
1.2 今時今日的C++
1.2.1 C++的江湖地位
1.2.2 C++11語言變化的領(lǐng)域
1.3 C++11特性的分類
1.4 C++特性一覽
1.4.1 穩(wěn)定性與兼容性之間的抉擇
1.4.2 更傾向于使用庫而不是擴展語言來實現(xiàn)特性
1.4.3 更傾向于通用的而不是特殊的手段來實現(xiàn)特性
1.4.4 專家新手一概支持
1.4.5 增強類型的安全性
1.4.6 與硬件緊密合作
1.4.7 開發(fā)能夠改變?nèi)藗兯季S方式的特性
1.4.8 融入編程現(xiàn)實
1.5 本書的約定
1.5.1 關(guān)于一些術(shù)語的翻譯
1.5.2 關(guān)于代碼中的注釋
1.5.3 關(guān)于本書中的代碼示例與實驗平臺
[第2章 保證穩(wěn)定性和兼容性
2.1 保持與C99兼容](https://yq.aliyun.com/articles/173908/)
2.1.1 預定義宏
2.1.2 __func__預定義標識符
2.1.3 _Pragma操作符
2.1.4 變長參數(shù)的宏定義以及__VA_ARGS__
2.1.5 寬窄字符串的連接
2.2 long long整型
2.3 擴展的整型
2.4 宏__cplusplus
2.5 靜態(tài)斷言
2.5.1 斷言:運行時與預處理時
2.5.2 靜態(tài)斷言與static_assert
2.6 noexcept修飾符與noexcept操作符
2.7 快速初始化成員變量
2.8 非靜態(tài)成員的sizeof
2.9 擴展的friend語法
2.10 final/override控制
2.11 模板函數(shù)的默認模板參數(shù)
2.12 外部模板
2.12.1 為什么需要外部模板
2.12.2 顯式的實例化與外部模板的聲明
2.13 局部和匿名類型作模板實參
2.14 本章小結(jié)
[第3章 通用為本,專用為末
3.1 繼承構(gòu)造函數(shù)](https://yq.aliyun.com/articles/174016/)
3.2 委派構(gòu)造函數(shù)
3.3 右值引用:移動語義和完美轉(zhuǎn)發(fā)
3.3.1 指針成員與拷貝構(gòu)造
3.3.2 移動語義
3.3.3 左值、右值與右值引用
3.3.4 std::move:強制轉(zhuǎn)化為右值
3.3.5 移動語義的一些其他問題
3.3.6 完美轉(zhuǎn)發(fā)
3.4 顯式轉(zhuǎn)換操作符
總結(jié)
以上是生活随笔為你收集整理的《深入理解C++11:C++ 11新特性解析与应用》——导读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于烂代码的那些事——什么是好代码
- 下一篇: C/C++中手动获取调用堆栈【转】