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