21天學通C++(第9版) Sams Teach Yourself C++ in One Hour a Day, 9/e

[美]悉達多·饒(Siddhartha Rao)

  • 21天學通C++(第9版)-preview-1
  • 21天學通C++(第9版)-preview-2
21天學通C++(第9版)-preview-1

買這商品的人也買了...

商品描述

這是一本經典的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 446

25.3.1 實例化vector 446

25.3.2 vector的成員函數和運算符 447

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

存在的問題 506

31.1.2 C++20模塊 506

31.1.3 創建模塊 507

31.1.4 使用模塊 508

31.1.5 為何導入模塊優於預處理器編譯指令#include

 508

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