21天學通C++(第9版) Sams Teach Yourself C++ in One Hour a Day, 9/e
[美]悉達多·饒(Siddhartha Rao)
- 出版商: 人民郵電
- 出版日期: 2023-08-01
- 售價: $719
- 貴賓價: 9.5 折 $683
- 語言: 簡體中文
- 頁數: 558
- ISBN: 7115616833
- ISBN-13: 9787115616838
-
相關分類:
C++ 程式語言
- 此書翻譯自: Sams Teach Yourself C++ in One Hour a Day, 9/e (Paperback)
立即出貨
買這商品的人也買了...
-
$1,620$1,588 -
$780$585 -
$550$495 -
$500$390 -
$229技術移民寶典:程序員海外求職錦囊
-
$680$510 -
$474$450 -
$774$735 -
$419$398 -
$1,000$790 -
$1,600$1,568 -
$880$695 -
$690$587 -
$419$398 -
$479$455 -
$580$458 -
$720$569 -
$839$797 -
$659$626 -
$659$626 -
$474$450 -
$534$507 -
$209$199 -
$509YOLO 目標檢測
-
$1,280$845
相關主題
商品描述
這是一本經典的C++編程入門指南,第9版針對C++20標準進行了內容上的全面更新,旨在幫助讀者編寫更快、更簡單、更可靠的C++代碼,並掌握C++和麵向對象編程的基本原理。
本書通過大量短小精悍的程序詳細而全面地闡述了C++的基本概念和技術應用,以及C++20新增的功能,這些內容被組織成結構合理、聯系緊密的章節。每章都提供了示例程序清單,並輔以示例輸出和代碼分析,以進一步闡述該章的主題。為幫助讀者鞏固所學的內容,每章末尾都提供了常見問題相關答案以及作業。讀者可對照附錄E提供的答案,瞭解自己對所學內容的掌握程度。
本書面向C++初學者,不要求讀者有C語言方面的背景知識,可作為高等院校教授C++課程的教材,也可供初學者自學C++時使用。
作者簡介
悉达多·饶(Siddhartha Rao)是SAP SE公司主管产品安全的副总裁,其作品享誉全球,并被翻译成法语和中文。他深信C++发展快速,并致力于为机器学习和人工智能领域的发展添砖加瓦。
目錄大綱
第 一部分 基礎知識
第 1章 緒論 2
1.1 C++簡史 2
1.1.1 與C語言的關系 2
1.1.2 C++的優點 2
1.1.3 C++標準的發展歷程 3
1.1.4 哪些人使用C++程序 3
1.2 編寫C++應用程序 3
1.2.1 生成可執行文件的步驟 3
1.2.2 分析並修復錯誤 4
1.2.3 集成開發環境 4
1.2.4 編寫第 一個C++應用程序 4
1.2.5 生成並執行第 一個C++應用程序 5
1.2.6 理解編譯錯誤 7
1.3 C++20新增的功能 7
1.4 總結 8
1.5 問與答 8
1.6 作業 8
1.6.1 測驗 8
1.6.2 練習 9
第 2章 C++程序的組成部分 10
2.1 Hello World程序的組成部分 10
2.1.1 預處理器編譯指令#include 10
2.1.2 程序的主體:main( ) 11
2.1.3 返回值 12
2.2 命名空間的概念 12
2.3 C++代碼中的註釋 13
2.4 C++函數 14
2.5 使用std::cin和std::cout執行基本輸入輸出操作 16
2.6 總結 17
2.7 問與答 17
2.8 作業 17
2.8.1 測驗 18
2.8.2 練習 18
第3章 使用變量和常量 19
3.1 什麽是變量 19
3.1.1 內存和尋址概述 19
3.1.2 聲明變量以訪問和使用內存 19
3.1.3 聲明並初始化多個類型相同的變量 21
3.1.4 理解變量的作用域 21
3.1.5 全局變量 22
3.1.6 命名約定 24
3.2 編譯器支持的常見C++變量類型 24
3.2.1 使用bool變量存儲布爾值 25
3.2.2 使用char變量存儲字符 25
3.2.3 有符號整數和無符號整數的概念 26
3.2.4 有符號整型short、int、long和long long 26
3.2.5 無符號整型unsigned short、unsigned int、unsigned long和unsigned long long 26
3.2.6 選擇正確的數據類型以免發生溢出錯誤 27
3.2.7 浮點類型float和double 28
3.3 使用sizeof確定變量的長度 28
3.4 使用auto自動推斷類型 30
3.5 使用typedef替換變量類型 31
3.6 什麽是常量 31
3.6.1 字面常量 32
3.6.2 使用const將變量聲明為常量 32
3.6.3 使用constexpr定義常量表達式 33
3.6.4 使用consteval定義C++20即時函數 34
3.6.5 枚舉 35
3.6.6 域限定枚舉 37
3.6.7 使用#define定義常量 37
3.7 不能用作常量或變量名的關鍵字 37
3.8 總結 38
3.9 問與答 38
3.10 作業 39
3.10.1 測驗 39
3.10.2 練習 40
第4章 管理數組和字符串 41
4.1 什麽是數組 41
4.1.1 為何需要數組 41
4.1.2 聲明和初始化靜態數組 42
4.1.3 數組中的數據是如何存儲的 42
4.1.4 訪問存儲在數組中的數據 43
4.1.5 修改存儲在數組中的數據 44
4.2 多維數組 46
4.2.1 聲明和初始化多維數組 46
4.2.2 訪問多維數組中的元素 47
4.3 動態數組 48
4.4 C風格字符串 49
4.5 C++字符串:使用std::string 51
4.6 總結 52
4.7 問與答 53
4.8 作業 53
4.8.1 測驗 53
4.8.2 練習 53
第5章 使用表達式、語句和運算符 54
5.1 語句 54
5.2 復合語句(語句塊) 55
5.3 使用運算符 55
5.3.1 賦值運算符(=) 55
5.3.2 理解左值和右值 55
5.3.3 加法運算符(+)、減法運算符( )、乘法運算符(*)、除法運算符(/)和求模運算符(%) 55
5.3.4 遞增運算符(++)和遞減運算符( ) 56
5.3.5 使用前綴還是後綴 57
5.3.6 相等運算符(==)和不等運算符(!=) 58
5.3.7 關系運算符 58
5.3.8 C++20三向比較運算符 60
5.3.9 邏輯運算NOT、AND、OR和XOR 62
5.3.10 使用C++邏輯運算符!、 &&和|| 63
5.3.11 按位運算符~、&、|和^ 66
5.3.12 按位右移運算符(>>)和左移 運算符(<<) 67
5.3.13 復合賦值運算符 68
5.3.14 使用運算符sizeof( )確定特定類型 變量占用的內存量 70
5.3.15 運算符的優先級和結合性 71
5.4 總結 72
5.5 問與答 72
5.6 作業 73
5.6.1 測驗 73
5.6.2 練習 73
第6章 控製程序流程 74
6.1 使用if...else有條件地執行 74
6.1.1 使用if…else進行條件編程 75
6.1.2 有條件地執行語句塊 76
6.1.3 嵌套if語句 78
6.1.4 使用switch-case進行條件處理 81
6.1.5 使用運算符 :進行條件處理 83
6.2 在循環中執行代碼 84
6.2.1 不成熟的goto循環 85
6.2.2 while循環 86
6.2.3 do…while循環 88
6.2.4 for循環 89
6.2.5 基於範圍的for循環 91
6.3 使用continue和break修改循環的行為 93
6.3.1 不結束的循環——無限循環 93
6.3.2 控制無限循環 94
6.4 編寫嵌套循環 96
6.4.1 使用嵌套循環遍歷多維數組 97
6.4.2 使用嵌套循環計算斐波那契數列 98
6.5 總結 99
6.6 問與答 100
6.7 作業 100
6.7.1 測驗 100
6.7.2 練習 100
第7章 使用函數組織代碼 102
7.1 為何需要函數 102
7.1.1 函數原型是什麽 103
7.1.2 函數定義是什麽 104
7.1.3 函數調用和實參是什麽 104
7.1.4 編寫接收多個參數的函數 104
7.1.5 編寫沒有參數和返回值的函數 105
7.1.6 帶默認值的函數參數 106
7.1.7 遞歸函數——調用自己的函數 108
7.1.8 包含多條return語句的函數 109
7.2 使用函數處理不同類型的數據 110
7.2.1 函數重載 110
7.2.2 將數組傳遞給函數 112
7.2.3 按引用傳遞參數 113
7.3 微處理器如何處理函數調用 114
7.3.1 內聯函數 115
7.3.2 自動推斷返回類型 116
7.3.3 lambda函數 117
7.4 總結 118
7.5 問與答 118
7.6 作業 119
7.6.1 測驗 119
7.6.2 練習 119
第8章 闡述指針和引用 121
8.1 什麽是指針 121
8.1.1 聲明指針 122
8.1.2 使用引用運算符(&)獲取變量的地址 122
8.1.3 使用指針存儲地址 123
8.1.4 使用解除引用運算符(*)訪問指向的數據 124
8.1.5 指針占用的內存量 126
8.2 動態內存分配 127
8.2.1 使用new和delete動態地分配和釋放內存 128
8.2.2 將遞增和遞減運算符(++和 )用於指針的結果 130
8.2.3 將關鍵字const用於指針 132
8.2.4 將指針傳遞給函數 133
8.2.5 數組和指針的類似之處 134
8.3 使用指針時常犯的編程錯誤 136
8.3.1 內存泄漏 136
8.3.2 指針指向無效的內存單元 136
8.3.3 懸浮指針(也叫迷途或失控指針) 137
8.3.4 檢查使用new發出的分配請求是否得到滿足 138
8.4 指針編程最佳實踐 140
8.5 引用是什麽 140
8.5.1 是什麽讓引用很有用 141
8.5.2 將關鍵字const用於引用 143
8.5.3 按引用向函數傳遞參數 143
8.6 總結 144
8.7 問與答 144
8.8 作業 145
8.8.1 測驗 145
8.8.2 練習 145
第二部分 C++面向對象編程基礎
第9章 類和對象 148
9.1 類和對象 148
9.1.1 聲明類 148
9.1.2 作為類實例的對象 149
9.1.3 使用句點運算符(.)訪問成員 149
9.1.4 使用指針運算符(->)訪問成員 150
9.2 關鍵字public和private 151
9.3 構造函數 154
9.3.1 聲明和實現構造函數 154
9.3.2 何時及如何使用構造函數 155
9.3.3 重載構造函數 156
9.3.4 沒有默認構造函數的類 157
9.3.5 帶默認值的構造函數參數 158
9.3.6 包含初始化列表的構造函數 159
9.4 析構函數 161
9.4.1 聲明和實現析構函數 161
9.4.2 何時及如何使用析構函數 162
9.5 復制構造函數 163
9.5.1 淺復制及其存在的問題 164
9.5.2 使用復制構造函數確保深復制 166
9.5.3 使用移動構造函數改善性能 169
9.6 構造函數和析構函數的其他用途 170
9.6.1 不允許復制的類 170
9.6.2 只能有一個實例的單例類 170
9.6.3 禁止在棧中實例化的類 172
9.6.4 使用構造函數進行類型轉換 174
9.7 this指針 176
9.8 將sizeof( )用於類 176
9.9 結構不同於類的地方 178
9.10 聲明友元 179
9.11 共享體:一種特殊的數據存儲機制 180
9.11.1 聲明共享體 180
9.11.2 在什麽情況下使用共享體 181
9.12 對類和結構使用聚合初始化 183
9.13 總結 186
9.14 問與答 186
9.15 作業 187
9.15.1 測驗 187
9.15.2 練習 187
第 10章 實現繼承 188
10.1 繼承基礎 188
10.1.1 繼承和派生 189
10.1.2 C++派生語法 189
10.1.3 訪問限定符protected 191
10.1.4 基類初始化——向基類傳遞參數 193
10.1.5 在派生類中覆蓋基類的方法 195
10.1.6 調用基類中被覆蓋的方法 197
10.1.7 在派生類中調用基類的方法 197
10.1.8 在派生類中隱藏基類的方法 199
10.1.9 構造順序 201
10.1.10 析構順序 201
10.2 私有繼承 203
10.3 保護繼承 205
10.4 切除問題 207
10.5 多繼承 208
10.6 使用final禁止繼承 210
10.7 總結 210
10.8 問與答 211
10.9 作業 211
10.9.1 測驗 211
10.9.2 練習 211
第 11章 多態 213
11.1 多態基礎 213
11.1.1 為何需要多態行為 213
11.1.2 使用虛函數實現多態行為 214
11.1.3 為何需要虛構造函數 216
11.1.4 虛函數的工作原理——理解虛函數表 219
11.1.5 抽象基類和純虛函數 222
11.2 使用虛繼承解決菱形問題 224
11.3 使用限定符override明確覆蓋意圖 227
11.4 使用final來禁止覆蓋函數 228
11.5 可將復制構造函數聲明為虛函數嗎 229
11.6 總結 232
11.7 問與答 232
11.8 作業 233
11.8.1 測驗 233
11.8.2 練習 233
第 12章 運算符類型與運算符重載 234
12.1 C++運算符 234
12.2 單目運算符 235
12.2.1 單目運算符的類型 235
12.2.2 單目遞增與單目遞減運算符 235
12.2.3 轉換運算符 238
12.2.4 解除引用運算符(*)和成員選擇 運算符(->) 240
12.3 雙目運算符 241
12.3.1 雙目運算符的類型 242
12.3.2 雙目加法與雙目減法運算符 242
12.3.3 實現運算符+=與 = 244
12.3.4 重載相等運算符(==)和不等 運算符(!=) 245
12.3.5 重載運算符<、>、<=和>= 247
12.3.6 C++20三向比較運算符 (<=>) 250
12.3.7 重載復制賦值運算符(=) 252
12.3.8 索引運算符 255
12.4 函數運算符( ) 257
12.5 用於高性能編程的移動構造函數和 移動賦值運算符 258
12.5.1 不必要的復制帶來的問題 258
12.5.2 聲明移動構造函數和移動賦值 運算符 258
12.6 用戶定義的字面量 263
12.7 不能重載的運算符 265
12.8 總結 265
12.9 問與答 265
12.10 作業 266
12.10.1 測驗 266
12.10.2 練習 266
第 13章 類型轉換運算符 267
13.1 為何需要類型轉換 267
13.2 為何有些C++程序員不喜歡C風格 類型轉換 268
13.3 C++類型轉換運算符 268
13.3.1 使用static_cast 268
13.3.2 使用dynamic_cast和運行階段類型識別 269
13.3.3 使用reinterpret_cast 272
13.3.4 使用const_cast 272
13.4 C++類型轉換運算符存在的問題 273
13.5 總結 274
13.6 問與答 274
13.7 作業 275
13.7.1 測驗 275
13.7.2 練習 275
第 14章 宏和模板簡介 276
14.1 預處理器與編譯器 276
14.2 使用#define定義常量 276
14.3 使用#define編寫宏函數 279
14.3.1 為什麽要使用括號 280
14.3.2 使用assert宏驗證表達式 281
14.3.3 使用宏函數的優點和缺點 282
14.4 模板簡介 283
14.4.1 模板聲明語法 283
14.4.2 各種類型的模板聲明 283
14.4.3 模板函數 284
14.4.4 模板與類型安全 285
14.4.5 模板類 286
14.4.6 聲明包含多個參數的模板 286
14.4.7 聲明包含默認參數的模板 287
14.4.8 一個模板類示例:HoldsPair 287
14.4.9 模板的實例化和具體化 289
14.4.10 模板類和靜態成員 290
14.4.11 參數數量可變的模板 291
14.4.12 使用static_assert執行編譯階段 檢查 294
14.4.13 在實際C++編程中使用模板 295
14.5 總結 295
14.6 問與答 296
14.7 作業 296
14.7.1 測驗 296
14.7.2 練習 296
第三部分 學習標準模板庫
第 15章 標準模板庫簡介 298
15.1 STL容器 298
15.1.1 順序容器 298
15.1.2 關聯容器 299
15.1.3 容器適配器 299
15.2 STL迭代器 300
15.3 STL算法 300
15.4 使用迭代器在容器和算法之間交互 300
15.5 選擇正確的容器 302
15.6 STL字符串類 303
15.7 總結 303
15.8 問與答 303
15.9 作業 304
第 16章 STL string類 305
16.1 為何需要字符串操作類 305
16.2 使用STL string類 306
16.2.1 實例化和復制STL string 306
16.2.2 訪問std::string的字符內容 308
16.2.3 拼接字符串 310
16.2.4 在string中查找字符或子 字符串 311
16.2.5 截短STL string 312
16.2.6 字符串反轉 314
16.2.7 字符串的大小寫轉換 315
16.3 基於模板的STL string實現 316
16.4 std::string中的operator ""s 316
16.5 使用C++20改進了的
std::string_view 317
16.6 總結 318
16.7 問與答 319
16.8 作業 319
16.8.1 測驗 319
16.8.2 練習 319
第 17章 STL動態數組類 320
17.1 std::vector的特點 320
17.2 典型的vector操作 320
17.2.1 實例化vector 320
17.2.2 使用push_back( )在vector末尾 插入元素 322
17.2.3 列表初始化 322
17.2.4 使用insert( )在指定位置 插入元素 323
17.2.5 使用數組語法訪問vector中的 元素 325
17.2.6 使用指針語法訪問vector中的 元素 326
17.2.7 刪除vector中的元素 327
17.3 理解大小和容量 328
17.4 STL deque 類 329
17.5 總結 332
17.6 問與答 332
17.7 作業 333
17.7.1 測驗 333
17.7.2 練習 333
第 18章 STL list和forward_list 334
18.1 std::list的特點 334
18.2 基本的list操作 334
18.2.1 實例化std::list對象 334
18.2.2 在list開頭或末尾插入元素 336
18.2.3 在list中間插入元素 337
18.2.4 刪除list中的元素 339
18.3 對list中的元素進行反轉和排序 340
18.3.1 使用list::reverse( )反轉元素的 排列順序 340
18.3.2 對元素進行排序 341
18.3.3 對包含對象的list進行排序以及 刪除其中的元素 343
18.3.4 std::forward_list 345
18.4 總結 347
18.5 問與答 347
18.6 作業 348
18.6.1 測驗 348
18.6.2 練習 348
第 19章 STL set和multiset 349
19.1 簡介 349
19.2 STL set和multiset的基本操作 349
19.2.1 實例化std::set對象 350
19.2.2 在set或multiset中插入 元素 351
19.2.3 在STL set或multiset中查找 元素 353
19.2.4 刪除STL set或multiset中的 元素 354
19.3 使用STL set和multiset的優缺點 358
19.4 總結 360
19.5 問與答 361
19.6 作業 361
19.6.1 測驗 361
19.6.2 練習 361
第 20章 STL map和multimap 362
20.1 STL映射類簡介 362
20.2 STL map和multimap的基本操作 363
20.2.1 實例化std::map和 std::multimap 363
20.2.2 在STL map或multimap中 插入元素 364
20.2.3 在STL map中查找元素 366
20.2.4 在STL multimap中查找元素 368
20.2.5 刪除STL map或multimap中的 元素 369
20.3 提供自定義的排序謂詞 371
20.4 基於鍵值對的STL散列表容器 374
20.4.1 散列表的工作原理 374
20.4.2 使用unordered_map和 unordered_multimap 374
20.5 總結 377
20.6 問與答 378
20.7 作業 378
20.7.1 測驗 378
20.7.2 練習 379
第四部分 lambda表達式和STL算法
第 21章 理解函數對象 382
21.1 函數對象與謂詞的概念 382
21.2 函數對象的典型用途 382
21.2.1 一元函數 382
21.2.2 一元謂詞 386
21.2.3 二元函數 387
21.2.4 二元謂詞 389
21.3 總結 391
21.4 問與答 392
21.5 作業 392
21.5.1 測驗 392
21.5.2 練習 392
第 22章 lambda表達式 393
22.1 lambda表達式是什麽 393
22.2 如何定義lambda表達式 394
22.2.1 捕獲變量 394
22.2.2 參數 394
22.2.3 返回類型 395
22.3 一元函數對應的lambda表達式 395
22.4 一元謂詞對應的lambda表達式 396
22.5 通過捕獲列表接收狀態的lambda 表達式 397
22.6 二元函數對應的lambda表達式 399
22.7 二元謂詞對應的lambda表達式 400
22.8 總結 402
22.9 問與答 402
22.10 作業 402
22.10.1 測驗 403
22.10.2 練習 403
第 23章 STL算法 404
23.1 什麽是STL算法 404
23.2 STL算法的分類 404
23.2.1 非變序算法 404
23.2.2 變序算法 405
23.3 使用STL算法 406
23.3.1 根據值或條件查找元素 406
23.3.2 計算包含給定值或滿足給定條件的元素數 408
23.3.3 在集合中搜索元素或序列 409
23.3.4 將容器中的元素初始化為 指定值 411
23.3.5 使用std::generate( )將元素設置為運行階段生成的值 412
23.3.6 使用for_each( )處理指定範圍內的元素 414
23.3.7 使用std::transform( )對範圍進行變換 415
23.3.8 復制和刪除操作 417
23.3.9 替換值以及替換滿足給定條件的元素 420
23.3.10 對集合進行排序以及在有序集合中搜索和刪除重復元素 421
23.3.11 將範圍分區 423
23.3.12 在有序集合中插入元素 424
23.3.13 使用C++20引入的std:: accumulate( )執行累積操作 426
23.4 C++20約束算法 426
23.5 總結 428
23.6 問與答 428
23.7 作業 429
23.7.1 測驗 429
23.7.2 練習 429
第 24章 自適應容器:棧和隊列 430
24.1 棧和隊列的行為特徵 430
24.1.1 棧 430
24.1.2 隊列 431
24.2 使用STL stack類 431
24.2.1 實例化stack 431
24.2.2 stack的成員函數 432
24.2.3 使用push( )和pop( )在棧頂插入和刪除元素 433
24.3 使用STL queue類 434
24.3.1 實例化queue 434
24.3.2 queue的成員函數 435
24.3.3 使用push( )在隊尾插入以及使用pop( )從隊首刪除 436
24.4 使用STL優先級隊列 437
24.4.1 實例化priority_queue類 437
24.4.2 priority_queue的成員函數 438
24.4.3 使用push( )在priority_queue末尾插入以及使用pop( )在priority_queue開頭刪除 439
24.5 總結 441
24.6 問與答 441
24.7 作業 441
24.7.1 測驗 441
24.7.2 練習 441
第 25章 使用STL位標志 442
25.1 bitset類 442
25.2 使用std::bitset及其成員 443
25.2.1 std::bitset中很有用的運算符 443
25.2.2 std::bitset的成員方法 444
25.3 vector
25.3.1 實例化vector
25.3.2 vector
25.4 總結 448
25.5 問與答 448
25.6 作業 448
25.6.1 測驗 449
25.6.2 練習 449
第五部分 C++進階概念
第 26章 理解智能指針 452
26.1 什麽是智能指針 452
26.1.1 常規(原始)指針存在的問題 452
26.1.2 智能指針有何幫助 453
26.2 智能指針是如何實現的 453
26.3 智能指針類型 454
26.3.1 深復制 454
26.3.2 寫時拷貝機制 456
26.3.3 引用計數智能指針 456
26.3.4 引用鏈接智能指針 456
26.3.5 破壞性復制 457
26.3.6 使用std::unique_ptr 458
26.4 深受歡迎的智能指針庫 460
26.5 總結 460
26.6 問與答 461
26.7 作業 461
26.7.1 測試 461
26.7.2 練習 461
第 27章 使用流進行輸入和輸出 462
27.1 流的概述 462
27.2 重要的C++流類和流對象 463
27.3 使用std::cout將指定格式的數據寫入控制台 464
27.3.1 使用std::cout修改數字的顯示格式 464
27.3.2 使用std::cout對齊文本和設置字段寬度 466
27.4 使用std::cin進行輸入 466
27.4.1 使用std::cin將輸入讀取到基本類型變量中 466
27.4.2 使用std::cin:get將輸入讀取到char* 緩沖區中 467
27.4.3 使用std::cin將輸入讀取到std::string中 468
27.5 使用std::fstream處理文件 469
27.5.1 使用open( )和close( )打開和關閉文件 470
27.5.2 使用open( )創建文本文件並使用運算符<<寫入文本 470
27.5.3 使用open( )和運算符>>讀取文本文件 471
27.5.4 讀寫二進制文件 472
27.6 使用std::stringstream對字符串進行轉換 474
27.7 總結 475
27.8 問與答 475
27.9 作業 476
27.9.1 測驗 476
27.9.2 練習 476
第 28章 異常處理 477
28.1 什麽是異常 477
28.2 導致異常的因素 477
28.3 使用try和catch捕獲異常 477
28.3.1 使用catch(…)處理所有異常 478
28.3.2 捕獲特定類型的異常 479
28.3.3 使用throw引發特定類型的異常 480
28.4 異常處理的工作原理 481
28.4.1 std::exception類 483
28.4.2 從std::exception派生出自定義異常類 483
28.5 總結 485
28.6 問與答 485
28.7 作業 486
28.7.1 測驗 486
28.7.2 練習 486
第 29章 C++20概念、範圍、視圖和適配器 488
29.1 概念 488
29.1.1 使用標準庫提供的概念 489
29.1.2 使用關鍵字requires定義自定義概念 490
29.1.3 將概念用於類和對象 492
29.2 範圍庫、視圖和適配器 494
29.2.1 視圖和適配器 495
29.2.2 範圍庫提供的適配器 496
29.2.3 合並多個適配器 498
29.3 總結 499
29.4 問與答 499
29.5 作業 499
29.5.1 測驗 499
29.5.2 練習 500
第30章 C++20線程 501
30.1 多線程技術 501
30.1.1 何謂線程 501
30.1.2 為何要編寫多線程應用程序 501
30.1.3 使用C++20線程庫 502
30.1.4 線程如何交換數據 504
30.1.5 使用互斥量和信號量同步線程 504
30.2 總結 504
30.3 問與答 505
30.4 作業 505
第31章 C++20模塊和C++23 506
31.1 模塊 506
31.1.1 #include
31.1.2 C++20模塊 506
31.1.3 創建模塊 507
31.1.4 使用模塊 508
31.1.5 為何導入模塊優於預處理器編譯指令#include
31.2 C++23有望引入的特性 509
31.3 更深入地學習C++ 509
31.3.1 在線文檔 509
31.3.2 提供指南和幫助的社區 509
31.4 總結 509
31.5 問與答 510
31.6 作業 510
附錄A 二進制和十六進制 511
A.1 十進制 511
A.2 二進制 511
A.2.1 電腦為何使用二進制 512
A.2.2 位和字節 512
A.2.3 1KB相當於多少字節 512
A.3 十六進制 512
A.4 不同進制之間的轉換 513
A.4.1 通用的轉換步驟 513
A.4.2 從十進制轉換為二進制 513
A.4.3 從十進制轉換為十六進制 514
附錄B C++關鍵字 515
附錄C 編寫傑出的C++代碼 516
附錄D ASCII 517
附錄E 答案 520