《計算機科學(xué)叢書:C++語言導(dǎo)學(xué)》作者是C++語言的設(shè)計者和實現(xiàn)者,寫作本書的目的是讓有經(jīng)驗的程序員快速了解C++現(xiàn)代語言。書中幾乎介紹了C++語言的全部核心功能和重要的標(biāo)準(zhǔn)庫組件,以很短的篇幅將C++語言的主要特性呈現(xiàn)給讀者,并給出一些關(guān)鍵示例,讓讀者用很短的時間就能對現(xiàn)代C++的概貌有一個清晰的了解,尤其是關(guān)于面向?qū)ο缶幊毯头盒途幊痰闹R。本書沒有涉及太多C++語言的細(xì)節(jié),非常適合想熟悉C++語言新特性的C/C++程序設(shè)計人員以及精通其他高級語言而想了解C++語言特性和優(yōu)點的人員。
C++11標(biāo)準(zhǔn)使得程序員能以更清晰、簡明、直接的方式表達(dá)思想,從而編寫出更快速和高效的代碼。作為C++的設(shè)計者和實現(xiàn)者,Bjarne Stroustrup在他的經(jīng)典著作《C++程序設(shè)計語言》中詳盡地介紹了C++語言的各種細(xì)節(jié)及其用法。
在這本中,作者把C++完整參考手冊的精華概述部分摘取出來,并且進(jìn)行必要的擴(kuò)充和提升,目的是讓有經(jīng)驗的程序員在很短時間內(nèi)就能清晰地了解到構(gòu)成現(xiàn)代C++語言的關(guān)鍵元素。本書雖薄,結(jié)構(gòu)卻清晰完整,作者在書中介紹了C++語言的絕大多數(shù)特性以及重要的一些標(biāo)準(zhǔn)庫組件。尤其難能可貴的是,雖然受篇幅所限無法對每個知識點展開深入講解,但依然能夠幫助程序員了解語言的全貌,并給出一些關(guān)鍵示例,便于他們更好地學(xué)習(xí)和使用C++語言。
作者并非孤立地介紹C++的特性,而是將其置于適當(dāng)?shù)某绦蛟O(shè)計風(fēng)格之中,這些風(fēng)格包括讀者熟悉的面向?qū)ο蟪绦蛟O(shè)計和泛型編程等。本書內(nèi)容豐富,涵蓋的范圍極其廣泛。從基礎(chǔ)知識開始逐漸延展到更多高級主題,并且包含了大量C++11的新語法點,比如移動語義、規(guī)范初始化、lambda表達(dá)式、高級容器、隨機數(shù)和并行等。本書最后討論了C++的設(shè)計、歷史演變以及擴(kuò)展。
《計算機科學(xué)叢書:C++語言導(dǎo)學(xué)》的目的并非教會讀者如何編程(學(xué)習(xí)編程可以參考作者的《C++程序設(shè)計原理與實踐》),讀者也不可能僅靠閱讀本書就熟練掌握C++(為此讀者可以參考作者的《C++程序設(shè)計語言》)。但是,如果你是一個C/C++程序員,并且想熟悉新版本的C++語言,或者你精通其他高級語言,希望了解一下C++語言有何特性和長處,那么本書顯然是很好的選擇。
教而至簡,不亦樂乎。
——西塞羅現(xiàn)在的C++仿佛進(jìn)化成了一種新的語言。與C++98相比,C++11更易于我們清晰、簡潔、直觀地表達(dá)思想。而且編譯器可以更好地檢查程序中的錯誤,程序的運行速度也提高了。
就像其他任何一種現(xiàn)代編程語言一樣,C++的規(guī)模龐大且提供的庫異常豐富,值得程序員認(rèn)真學(xué)習(xí)以便高效地利用。這本小冊子的目的是讓有經(jīng)驗的程序員快速了解現(xiàn)代C++語言,因此它幾乎介紹了C++的全部核心功能和重要的標(biāo)準(zhǔn)庫組件。讀者花費幾個小時就能讀完本書,但是想必所有人都清楚,要想寫出漂亮的C++程序絕非一日之功。好在本書的目的并非讓讀者熟練掌握一切,而只是介紹語言的概貌,給出一些經(jīng)典的例子,然后幫助讀者開始自己的C++之旅。如果讀者希望深入了解C++語言,請閱讀我的另一本著作《The C++ Programming Language,F(xiàn)ourth Edition》(簡稱TC++PL4)。實際上,本書正是TC++PL4第2~5章的擴(kuò)充版,只不過出于完整性和獨立性的考慮我們稍微增加了一些內(nèi)容。本書的篇章結(jié)構(gòu)與TC++PL4保持一致,讀者如果對細(xì)節(jié)感興趣,可以在TC++PL4中進(jìn)一步尋找答案。同樣,在我的個人主頁上為TC++PL4編寫的習(xí)題也可以用于本書。
我們假設(shè)讀者已經(jīng)擁有了一些編程經(jīng)驗。如果沒有,建議你先找一本入門教材學(xué)習(xí)一下,比如《Programming:Principles and Practice Using C++》[Stroustrup,2009]。即便你曾經(jīng)編寫過程序,所使用的語言或者編寫的應(yīng)用也可能在風(fēng)格或形式上與本書相距甚遠(yuǎn)。
出版者的話
中文版序
譯者序
前言
第1章 基礎(chǔ)知識 1
1.1 引言 1
1.2 程序 1
1.3 Hello,World! 2
1.4 函數(shù) 3
1.5 類型、變量和算術(shù)運算 5
1.6 作用域和生命周期 7
1.7 常量 8
1.8 指針、數(shù)組和引用 9
1.9 檢驗 11
1.10 建議 13
第2章 用戶自定義類型 15
2.1 引言 15
2.2 結(jié)構(gòu) 15
2.3 類 17
2.4 聯(lián)合 18
2.5 枚舉 19
2.6 建議 20
第3章 模塊化 22
3.1 引言 22
3.2 分離編譯 23
3.3 命名空間 24
3.4 錯誤處理 25
3.4.1 異常 26
3.4.2 不變式 27
3.4.3 靜態(tài)斷言 28
3.5 建議 29
第4章 類 30
4.1 引言 30
4.2 具體類型 31
4.2.1 一種算術(shù)類型 31
4.2.2 容器 33
4.2.3 初始化容器 34
4.3 抽象類型 36
4.4 虛函數(shù) 38
4.5 類層次結(jié)構(gòu) 39
4.5.1 顯式覆蓋 40
4.5.2 層次結(jié)構(gòu)的益處 41
4.5.3 層次結(jié)構(gòu)漫游 42
4.5.4 避免資源泄漏 43
4.6 拷貝和移動 44
4.6.1 拷貝容器 44
4.6.2 移動容器 45
4.6.3 基本操作 47
4.6.4 資源管理 49
4.6.5 抑制操作 50
4.7 建議 51
第5章 模板 53
5.1 引言 53
5.2 參數(shù)化類型 53
5.3 函數(shù)模板 55
5.4 概念和泛型編程 56
5.5 函數(shù)對象 57
5.6 可變參數(shù)模板 59
5.7 別名 60
5.8 模板編譯模型 61
5.9 建議 61
第6章 標(biāo)準(zhǔn)庫概覽 63
6.1 引言 63
6.2 標(biāo)準(zhǔn)庫組件 63
6.3 標(biāo)準(zhǔn)庫頭文件和命名空間 64
6.4 建議 66
第7章 字符串和正則表達(dá)式 67
7.1 引言 67
7.2 字符串 67
7.2.1 string的實現(xiàn) 69
7.3 正則表達(dá)式 69
7.3.1 搜索 70
7.3.2 正則表達(dá)式符號表示 71
7.3.3 迭代器 75
7.4 建議 75
第8章 I/O流 77
8.1 引言 77
8.2 輸出 78
8.3 輸入 79
8.4 I/O狀態(tài) 80
8.5 用戶自定義類型的I/O 81
8.6 格式化 82
8.7 文件流 83
8.8 字符串流 83
8.9 建議 84
第9章 容器 86
9.1 引言 86
9.2 vector 86
9.2.1 元素 89
9.2.2 范圍檢查 89
9.3 list 90
9.4 map 91
9.5 unorder_map 92
9.6 容器概述 93
9.7 建議 94
第10章 算法 96
10.1 引言 96
10.2 使用迭代器 97
10.3 迭代器類型 99
10.4 流迭代器 100
10.5 謂詞 102
10.6 標(biāo)準(zhǔn)庫算法概覽 102
10.7 容器算法 103
10.8 建議 104
第11章 實用工具 105
11.1 引言 105
11.2 資源管理 105
11.2.1 unique_ptr和shared_ptr 106
11.3 特殊容器 108
11.3.1 array 109
11.3.2 bitset 111
11.3.3 pair和tuple 111
11.4 時間 113
11.5 函數(shù)適配器 113
11.5.1 bind() 113
11.5.2 mem_fn() 114
11.5.3 function 114
11.6 類型函數(shù) 115
11.6.1 iterator_traits 116
11.6.2 類型謂詞 117
11.7 建議 118
第12章 數(shù)值計算 119
12.1 引言 119
12.2 數(shù)學(xué)函數(shù) 119
12.3 數(shù)值算法 120
12.4 復(fù)數(shù) 121
12.5 隨機數(shù) 121
12.6 向量算術(shù) 123
12.7 數(shù)值限制 124
12.8 建議 124
第13章 并發(fā) 125
13.1 引言 125
13.2 任務(wù)和thread 126
13.3 傳遞參數(shù) 126
13.4 返回結(jié)果 127
13.5 共享數(shù)據(jù) 128
13.6 等待事件 129
13.7 任務(wù)通信 130
13.7.1 future和promise 131
13.7.2 packaged_task 132
13.7.3 async() 133
13.8 建議 133
第14章 歷史和兼容性 135
14.1 歷史 135
14.1.1 大事年表 136
14.1.2 早期的C++ 137
14.1.3 ISO C++標(biāo)準(zhǔn) 139
14.2 C++11擴(kuò)展 140
14.2.1 語言特性 140
14.2.2 標(biāo)準(zhǔn)庫組件 141
14.2.3 已棄用特性 142
14.2.4 類型轉(zhuǎn)換 143
14.3 C/C++兼容性 143
14.3.1 C和C++是兄弟 144
14.3.2 兼容性問題 145
14.4 參考文獻(xiàn) 147
14.5 建議 149
索引 151