內容簡介
《C++程序設計語言》(原書第4版)是C++領域經典的參考書,介紹瞭C++11的各項新特性和新功能。全書共分四部分。部分(第1~5章)是引言,包括C++的背景知識,C++語言及其標準庫的簡要介紹;第二部分(第6~15章)介紹C++的內置類型和基本特性,以及如何用它們構造程序;第三部分(第16~29章)介紹C++的抽象機製及如何用這些機製編寫麵嚮對象程序和泛型程序;第四部分(第30~44章)概述標準庫並討論一些兼容性問題。由於篇幅問題,原書中文版分兩冊齣版,分彆對應原書的至三部分和第四部分。這一冊為至三部分。
目錄
The C++ Programming Language, Fourth Edition
齣版者的話
譯者序
前言
第3版前言
第2版前言
第1版前言
第一部分 引言
第1章 緻讀者 2
1.1 本書結構 2
1.1.1 引言 2
1.1.2 基本特性 3
1.1.3 抽象機製 4
1.1.4 標準庫 5
1.1.5 例子和參考文獻 5
1.2 C++的設計 7
1.2.1 程序設計風格 8
1.2.2 類型檢查 11
1.2.3 C兼容性 12
1.2.4 語言、庫和係統 12
1.3 學習C++ 14
1.3.1 用C++編程 15
1.3.2 對C++程序員的建議 16
1.3.3 對C程序員的建議 16
1.3.4 對Java程序員的建議 17
1.4 C++的曆史 18
1.4.1 大事年錶 19
1.4.2 早期的C++ 19
1.4.3 1998標準 21
1.4.4 2011標準 23
1.4.5 C++的用途 26
1.5 建議 27
1.6 參考文獻 28
第2章 C++概覽:基礎知識 32
2.1 引言 32
2.2 基本概念 33
2.2.1 Hello,World! 33
2.2.2 類型、變量和算術運算 34
2.2.3 常量 36
2.2.4 檢驗和循環 37
2.2.5 指針、數組和循環 38
2.3 用戶自定義類型 40
2.3.1 結構 41
2.3.2 類 42
2.3.3 枚舉 43
2.4 模塊化 44
2.4.1 分離編譯 45
2.4.2 名字空間 46
2.4.3 錯誤處理 47
2.5 附記 50
2.6 建議 50
第3章 C++概覽:抽象機製 51
3.1 引言 51
3.2 類 51
3.2.1 具體類型 52
3.2.2 抽象類型 56
3.2.3 虛函數 58
3.2.4 類層次 59
3.3 拷貝和移動 62
3.3.1 拷貝容器 63
3.3.2 移動容器 64
3.3.3 資源管理 66
3.3.4 抑製操作 66
3.4 模闆 67
3.4.1 參數化類型 67
3.4.2 函數模闆 69
3.4.3 函數對象 69
3.4.4 可變參數模闆 71
3.4.5 彆名 72
3.5 建議 73
第4章 C++概覽:容器與算法 74
4.1 標準庫 74
4.1.1 標準庫概述 75
4.1.2 標準庫頭文件與名字空間 75
4.2 字符串 77
4.3 I/O流 78
4.3.1 輸齣 78
4.3.2 輸入 79
4.3.3 用戶自定義類型的I/O 80
4.4 容器 81
4.4.1 vector 81
4.4.2 list 84
4.4.3 map 85
4.4.4 unordered_map 86
4.4.5 容器概述 86
4.5 算法 87
4.5.1 使用迭代器 88
4.5.2 迭代器類型 90
4.5.3 流迭代器 91
4.5.4 謂詞 93
4.5.5 算法概述 93
4.5.6 容器算法 94
4.6 建議 94
第5章 C++概覽:並發與實用功能 96
5.1 引言 96
5.2 資源管理 96
5.2.1 unique_ptr與shared_ptr 97
5.3 並發 99
5.3.1 任務和thread 99
5.3.2 傳遞參數 100
5.3.3 返迴結果 100
5.3.4 共享數據 101
5.3.5 任務通信 103
5.4 小工具組件 106
5.4.1 時間 106
5.4.2 類型函數 107
5.4.3 pair和tuple 109
5.5 正則錶達式 110
5.6 數學計算 111
5.6.1 數學函數和算法 111
5.6.2 復數 111
5.6.3 隨機數 112
5.6.4 嚮量算術 113
5.6.5 數值限製 113
5.7 建議 114
第二部分 基本功能
第6章 類型與聲明 116
6.1 ISO C++標準 116
6.1.1 實現 117
6.1.2 基本源程序字符集 118
6.2 類型 118
6.2.1 基本類型 119
6.2.2 布爾值 119
6.2.3 字符類型 121
6.2.4 整數類型 124
6.2.5 浮點數類型 126
6.2.6 前綴和後綴 127
6.2.7 void 128
6.2.8 類型尺寸 128
6.2.9 對齊 130
6.3 聲明 131
6.3.1 聲明的結構 133
6.3.2 聲明多個名字 134
6.3.3 名字 134
6.3.4 作用域 136
6.3.5 初始化 138
6.3.6 推斷類型:auto和decltype() 141
6.4 對象和值 144
6.4.1 左值和右值 144
6.4.2 對象的生命周期 145
6.5 類型彆名 146
6.6 建議 147
第7章 指針、數組與引用 148
7.1 引言 148
7.2 指針 148
7.2.1 void* 149
7.2.2 nullptr 150
7.3 數組 150
7.3.1 數組的初始化器 152
7.3.2 字符串字麵值常量 152
7.4 數組中的指針 155
7.4.1 數組漫遊 156
7.4.2 多維數組 158
7.4.3 傳遞數組 159
7.5 指針與const 161
7.6 指針與所有權 163
7.7 引用 163
7.7.1 左值引用 164
7.7.2 右值引用 167
7.7.3 引用的引用 169
7.7.4 指針與引用 170
7.8 建議 172
第8章 結構、聯閤與枚舉 173
8.1 引言 173
8.2 結構 173
8.2.1 struct的布局 175
8.2.2 struct的名字 176
8.2.3 結構與類 177
8.2.4 結構與數組 178
8.2.5 類型等價 180
8.2.6 普通舊數據 180
8.2.7 域 182
8.3 聯閤 183
8.3.1 聯閤與類 185
8.3.2 匿名union 186
8.4 枚舉 188
8.4.1 enum class 188
8.4.2 普通的enum 191
8.4.3 未命名的enum 192
8.5 建議 193
第9章 語句 194
9.1 引言 194
9.2 語句概述 194
9.3 聲明作為語句 195
9.4 選擇語句 196
9.4.1 if語句 196
9.4.2 switch語句 198
9.4.3 條件中的聲明 200
9.5 循環語句 201
9.5.1 範圍for語句 201
9.5.2 for語句 202
9.5.3 while語句 203
9.5.4 do語句 203
9.5.5 退齣循環 204
9.6 goto語句 204
9.7 注釋與縮進 205
9.8 建議 207
第10章 錶達式 208
10.1 引言 208
10.2 一個桌麵計算器示例 208
10.2.1 分析器 209
10.2.2 輸入 213
10.2.3 底層輸入 216
10.2.4 錯誤處理 217
10.2.5 驅動程序 217
10.2.6 頭文件 218
10.2.7 命令行參數 218
10.2.8 關於風格 220
10.3 運算符概述 220
10.3.1 結果 224
10.3.2 求值順序 224
10.3.3 運算符優先級 225
10.3.4 臨時對象 226
10.4 常量錶達式 227
10.4.1 符號化常量 229
10.4.2 常量錶達式中的const 229
10.4.3 字麵值常量類型 229
10.4.4 引用參數 230
10.4.5 地址常量錶達式 231
10.5 隱式類型轉換 231
10.5.1 提升 231
10.5.2 類型轉換 232
10.5.3 常用的算術類型轉換 234
10.6 建議 235
第11章 選擇適當的操作 236
11.1 其他運算符 236
11.1.1 邏輯運算符 236
11.1.2 位邏輯運算符 236
11.1.3 條件錶達式 238
11.1.4 遞增與遞減 238
11.2 自由存儲 240
11.2.1 內存管理 241
11.2.2 數組 243
11.2.3 獲取內存空間 244
11.2.4 重載new 245
11.3 列錶 247
11.3.1 實現模型 248
11.3.2 限定列錶 249
11.3.3 未限定列錶 249
11.4 lambda錶達式 251
11.4.1 實現模型 251
11.4.2 lambda的替代品 252
11.4.3 捕獲 254
11.4.4 調用與返迴 257
11.4.5 lambda的類型 257
11.5 顯式類型轉換 258
11.5.1 構造 259
11.5.2 命名轉換 261
11.5.3 C風格的轉換 262
11.5.4 函數形式的轉換 262
11.6 建議 263
第12章 函數 264
12.1 函數聲明 264
12.1.1 為什麼使用函數 265
12.1.2 函數聲明的組成要件 265
前言/序言
The C++ Programming Language, Fourth Edition所有計算機科學問題,都可以通過引入一個新的間接層次來解決,那些已有過多間接層次的問題除外。
——David J. Wheeler與C++98標準相比,C++11標準讓我可以更清晰、更簡潔而且更直接地錶達自己的想法。而且,新版本的編譯器可以對程序進行更好的檢查並生成更快的目標程序。因此,C++11給人的感覺就像是一種新語言一樣。
在本書中,我追求完整性(completeness)。我會介紹專業程序員可能需要的每個語言特性和標準庫組件。對每個特性或組件,我將給齣:
基本原理:設計這個特性(組件)是為瞭幫助解決哪類問題?其設計原理是什麼?它有什麼根本的局限?規範:它該如何定義?我將以專業程序員為目標讀者來選擇內容的詳略程度,對於要求更高的C++語言研究者,有很多ISO標準的文獻可供查閱。
例子:當單獨使用這個特性或與其他特性組閤使用時,如何用好它?其中的關鍵技術和習慣用法是怎樣的?在程序的可維護性和性能方麵是否有一些隱含的問題?多年來,無論是C++語言本身還是它的使用,都已經發生瞭巨大改變。從程序員的角度,大多數改變都屬於語言的改進。與之前的版本相比,當前的ISO C++標準(ISO/IEC 14882-2011,通常稱為C++11)在編寫高質量代碼方麵無疑是一個好得多的工具。但是它好在哪裏?現代C++語言支持什麼樣的程序設計風格和技術?這些技術靠哪些語言特性和標準庫特性來支撐?精練、正確、可維護性好、性能高的C++代碼的基本構建單元是怎樣的?本書將迴答這些關鍵問題。很多答案已經不同於1985、1995或2005等舊版本的C++語言瞭:C++在進步。
C++是一種通用程序設計語言,它強調富類型、輕量級抽象的設計和使用。C++特彆適閤開發資源受限的應用,例如可在軟件基礎設施中發現的那些應用。那些花費時間學習高質量代碼編寫技術的程序員將會從C++語言受益良多。C++是為那些嚴肅對待編程的人而設計的。人類文明已經嚴重依賴軟件,編寫高質量的軟件非常重要。
目前已經部署的C++代碼達到數十億行,因此程序穩定性備受重視——很多1985年和1995年編寫的C++代碼仍然運行良好,而且還會繼續運行幾十年。但是,對所有這些應用程序,都可以用現代C++語言寫齣更好的版本;如果你墨守成規,將來寫齣的代碼將會是低質量、低性能的。對穩定性的強調還意味著,你現在遵循標準寫齣的代碼,在未來幾十年中會運行良好。本書中所有代碼都遵循2011 ISO C++標準。
本書麵嚮三類讀者:
想知道新的ISO C++標準都提供瞭哪些新特性的C++程序員。
好奇C++到底提供瞭哪些C語言的特性的C程序員。
具備Java、C#、Python和Ruby等編程語言背景,正在探尋“更接近機器”的語言,即更靈活、提供更好的編譯時檢查或是更好性能的語言的程序員。
自然,這三類讀者可能是有交集的——一個專業軟件開發者通常掌握多門編程語言。
本書假定目標讀者是程序員。如果你想問“什麼是for循環?”或是“什麼是編譯器?”,那麼本書現在還不適閤你,我嚮你推薦我的另一本書《C++程序設計原理與實踐》,這本書適閤作為程序設計和C++語言的入門書籍。而且,我假定讀者是較為成熟的軟件開發者。如果你的問題是“為什麼要費力進行測試?”或者認為“所有語言基本都是一樣的,給我看語法就可以瞭”,甚至確信存在一種適閤所有任務的完美語言,那麼本書也不適閤你。
相對於C++98,C++11提齣瞭哪些改進和新特性呢?適閤現代計算機的機器模型會涉及大量並發處理。為此,C++11提供瞭用於係統級並行編程(如使用多核)的語言和標準庫特性。C++11還提供瞭正則錶達式處理、資源管理指針、隨機數、改進的容器(包括哈希錶)以及其他很多特性。此外,C++11還提供瞭通用和一緻的初始化機製、更簡單的for語句、移動語義、基礎的Unicode支持、lambda錶達式、通用常量錶達式、控製類缺省定義的能力、可變參數模闆、用戶定義的字麵值常量和其他很多新特性。請記住,這些標準庫和語言特性的目標就是支撐那些用來開發高質量軟件的程序設計技術。這些特性應該組閤使用——將它們看作蓋大樓的磚,而不應該相互隔離地單獨使用來解決特定問題。計算機是一種通用機器,而C++在其中起著重要作用。特彆是,C++的設計目標就是足夠靈活和通用,以便處理那些連它的設計者都未曾想象過的未來難題。
緻謝除瞭本書上一版緻謝提及的人之外,我還要感謝Pete Becker、Hans-J. Boehm、Marshall Clow、Jonathan Coe、Lawrence Crowl、Walter Daugherty、J. Daniel Garcia、Robert Harle、Greg Hickman、Howard Hinnant、Brian Kernighan、Daniel Krügler、Nevin Liber、Michel Michaud、Gary Powell、Jan Christiaan van Winkel和Leor Zolman。沒有他們的幫助,本書的質量要差得多。
感謝Howard Hinnant為我解答很多有關標準庫的問題。
Andrew Sutton是Origin庫的作者,模闆相關章節中很多模擬概念的討論都是基於這個測試平颱的。他還是Matrix庫的作者,這是第29章的主題。Origin庫是開源的,在互聯網上搜索“Origin”和“Andrew Sutton”就能找到。
感謝我指導的畢業設計班,他們從部分中找齣的問題比其他任何人都多。
假如我能遵照審閱人的所有建議,毫無疑問會大幅度提高本書的質量,但篇幅上也會增加數百頁。每個專傢審閱人都建議增加技術細節、進階示例和很多有用的開發規範;每個新手審閱人(或教育工作者)都建議增加示例;而大多數審閱人都(正確地)注意到本書的篇幅可能過長瞭。
感謝普林斯頓大學計算機科學係,特彆感謝Brian Kernighan教授,在我利用部分休假時間撰寫此書時給予我熱情接待。
感謝劍橋大學計算機實驗室,特彆感謝Andy Hopper教授,在我利用部分休假時間撰寫此書時給予我熱情接待。
感謝我的編輯Peter Gordon以及他在Addison-Wesley的齣版團隊,感謝你們的幫助和耐心。
Bjarne Stroustrup於得剋薩斯大學城第3版前言The C++ Programming Language, Fourth Edition去編程就是去理解。
——Kristen Nygaard我覺得用C++編程比以往更令人愉快。在過去這些年裏,C++在支持設計和編程方麵取得瞭令人振奮的進步,針對其使用的大量新技術已經被開發齣來瞭。然而,C++並不隻是好玩。普通的程序員在幾乎所有種類和規模的開發項目上,在生産率、可維護性、靈活性和質量方麵都取得瞭顯著的進步。到今天為止,C++已經實現瞭我當初期望中的絕大部分,還在許多我原來根本沒有夢想過的工作中取得瞭成功。
本書介紹的是標準C++以及由C++所支持的關鍵編程技術和設計技術。與本書第1版所介紹的那個C++版本相比,標準C++是一個經過瞭更仔細推敲的更強大的語言。各種新的語言特徵,如名字空間、異常、模闆,以及運行時類型識彆,使人能以比過去更直接的方式使用許多技術,標準庫使程序員能夠從比基本語言高得多的層麵上起步。
本書第2版中大約有三分之一的內容來自第1版。第3版則重寫瞭更大的篇幅。它提供的許多東西是大部分有經驗的程序員也需要的,與此同時,本書也比它的以前版本更容易讓新手入門。C++使用的爆炸性增長和由此帶來的海量經驗積纍使這些成為可
C++程序設計語言(第1-3部分)(原書第4版) 下載 mobi epub pdf txt 電子書 格式
評分
☆☆☆☆☆
看發明人寫的教程未必能學的更快,但也許能懂的更深。
評分
☆☆☆☆☆
。。。。。。。。。。。。。。。。。。還好。。。。。。。。。。。。。。。。。。。還好。。。。。。。。。
評分
☆☆☆☆☆
美好生活的有力保證,和諧社會的堅實基礎,紮實基礎,穩固防綫。
評分
☆☆☆☆☆
書是正版,沒來的及看,怕是要吃灰瞭……
評分
☆☆☆☆☆
買來收藏吧
評分
☆☆☆☆☆
和c++ primer相比,這本書多瞭模闆元編程與並發。
評分
☆☆☆☆☆
2、翻譯實在太差瞭。我隨手翻瞭並發和綫程兩個章節,找瞭一些地方給大傢看看。
評分
☆☆☆☆☆
顯示11.1到的11.5號纔到,也沒塑料包裝,這些都不計較。可惡的是京東工作人員私自給我簽收,我去拿貨的時候他們告訴我重復發貨瞭,要拆開包裹驗貨,我讓他們拆瞭,然後沒錯,但是沒有發票。貨已經被他們簽收瞭,沒辦法,我隻能聯係京東客服,但是客服卻說開過發票瞭,真是無語,貨被京東工作人員簽收,也被他們以重復發貨為由拆開檢查瞭,根本沒有。我問客服怎麼辦,竟然說我的訂單是拆分發送的,沒辦法解決。你們拆分發送,齣瞭錯就讓客戶承擔責任?
評分
☆☆☆☆☆
大師的大作,值得好好認真看