C++現(xiàn)代編程技術(shù)寫給工程師的C++教程
定 價:129.8 元
- 作者:[德]彼得·哥特史林(Peter Gottschling)
- 出版時間:2024/7/1
- ISBN:9787115637642
- 出 版 社:人民郵電出版社
- 中圖法分類:TP312.8
- 頁碼:501
- 紙張:
- 版次:01
- 開本:16開
在科學(xué)和工程領(lǐng)域,很多軟件都是用C++來實現(xiàn)的。隨著軟件項目的規(guī)模越來越大,C++的優(yōu)勢更加突出。C++既能夠支持足夠貼近硬件層面的編程工作,又能夠駕馭高級抽象的編程需求。因此,全面掌握C++語言的語法及新特性,對開發(fā)者非常重要。
本書由淺入深地介紹了C++編程的方方面面,涉及C++基礎(chǔ)、類、泛型編程、程序庫、元編程、面向?qū)ο缶幊、科學(xué)項目等內(nèi)容,還通過3個附錄(程序庫、編程工具、語言規(guī)范)全面介紹了一些拓展知識。
本書適合想全面學(xué)習(xí)C++編程的讀者以及對C++新特性感興趣的讀者閱讀參考。
本書是你掌握 C++ 編程精髓的得力助手。無論你是硬件底層的編程高手,還是追求高級抽象思維的軟件工程師,本書都將引領(lǐng)你深入C++的每一個層面。
本書緊跟 C++17 和 C++20 的新標(biāo)準(zhǔn),通過豐富多樣的技術(shù)案例,為你呈現(xiàn) C++ 編程的強大魅力。
本書由資深C++教育專家彼得·哥特史林(Peter Gottschling)編寫,結(jié)合其在物理、數(shù)學(xué)、工程領(lǐng)域的教學(xué)經(jīng)驗,為你細(xì)致解讀C++的高級特性,帶你領(lǐng)略從基礎(chǔ)到高級的編程藝術(shù)。
無論你的編程經(jīng)驗如何,你都將快速掌握 lambda 表達式、可變參數(shù)模板等日益強大的C++特性。
彼得·哥特史林(Peter Gottschling)專注于開發(fā)行業(yè)領(lǐng)先的科學(xué)計算軟件,是 ISO C++ 標(biāo)準(zhǔn)委員會成員,德國編程語言標(biāo)準(zhǔn)委員會主席,以及德累斯頓 C++ 用戶組的創(chuàng)始人。曾就讀于德累斯頓工業(yè)大學(xué),并同時學(xué)習(xí)了數(shù)學(xué)和計算機科學(xué)兩門專業(yè),分別獲得學(xué)士學(xué)位和博士學(xué)位。
第 1章 C++基礎(chǔ) 1
1.1 我們的第 一個程序 1
1.2 變量 3
1.2.1 內(nèi)置類型 4
1.2.2 字符和字符串 5
1.2.3 聲明變量 6
1.2.4 常量 6
1.2.5 字面量 7
1.2.6 非窄化初始化 9
1.2.7 作用域 10
1.3 操作符 12
1.3.1 算術(shù)操作符 13
1.3.2 布爾操作符 15
1.3.3 位操作符 17
1.3.4 賦值操作符 17
1.3.5 程序控制流 18
1.3.6 內(nèi)存管理 19
1.3.7 訪問操作符 19
1.3.8 類型處理 19
1.3.9 異常處理 20
1.3.10 操作符重載 20
1.3.11 操作符優(yōu)先級 20
1.3.12 避免歧義 21
1.4 表達式和語句 23
1.4.1 表達式 23
1.4.2 語句 24
1.4.3 分支 24
1.4.4 循環(huán) 27
1.4.5 goto 30
1.5 函數(shù) 30
1.5.1 參數(shù) 30
1.5.2 返回值 32
1.5.3 內(nèi)聯(lián) 33
1.5.4 重載 34
1.5.5 main函數(shù) 35
1.6 異常處理 36
1.6.1 斷言 36
1.6.2 異常 38
1.6.3 靜態(tài)斷言 42
1.7 I/O 42
1.7.1 標(biāo)準(zhǔn)輸出 42
1.7.2 標(biāo)準(zhǔn)輸入 43
1.7.3 文件的輸入和輸出 43
1.7.4 通用流的概念 44
1.7.5 格式化 45
1.7.6 新型格式化 46
1.7.7 處理I/O異常 49
1.7.8 文件系統(tǒng) 52
1.8 數(shù)組、指針和引用 53
1.8.1 數(shù)組 53
1.8.2 指針 55
1.8.3 智能指針 57
1.8.4 引用 60
1.8.5 指針和引用的區(qū)別 61
1.8.6 不要引用過期數(shù)據(jù) 61
1.8.7 數(shù)組的容器 62
1.9 結(jié)構(gòu)化的軟件項目 64
1.9.1 注釋 65
1.9.2 預(yù)處理器指令 66
1.10 練習(xí) 70
1.10.1 窄化 70
1.10.2 字面量 70
1.10.3 操作符 70
1.10.4 分支 71
1.10.5 循環(huán) 71
1.10.6 I/O 71
1.10.7 數(shù)組和指針 71
1.10.8 函數(shù) 71
第 2章 類 72
2.1 為通用性編程而不局限于技術(shù)細(xì)節(jié) 72
2.2 成員 74
2.2.1 成員變量 74
2.2.2 可訪問性 75
2.2.3 訪問操作符 77
2.2.4 類的靜態(tài)聲明 77
2.2.5 成員函數(shù) 78
2.3 設(shè)置值:構(gòu)造函數(shù)與賦值 79
2.3.1 構(gòu)造函數(shù) 79
2.3.2 賦值 88
2.3.3 初始化器列表 89
2.3.4 統(tǒng)一初始化 91
2.3.5 移動語義 93
2.3.6 通過字面量構(gòu)造對象 102
2.4 析構(gòu)函數(shù) 104
2.4.1 實現(xiàn)規(guī)則 104
2.4.2 妥善處理資源 104
2.5 方法生成總結(jié) 110
2.6 訪問成員變量 111
2.6.1 訪問函數(shù) 111
2.6.2 下標(biāo)操作符 112
2.6.3 常量成員函數(shù) 113
2.6.4 引用限定的成員 114
2.7 操作符重載的設(shè)計 116
2.7.1 保持一致性 116
2.7.2 優(yōu)先級 117
2.7.3 成員函數(shù)和自由函數(shù) 117
2.7.4 重載等式 119
2.7.5 重載“飛船”運算符 121
2.7.6 重載中的類型系統(tǒng) 123
2.8 練習(xí) 124
2.8.1 多項式 124
2.8.2 有理數(shù) 124
2.8.3 移動賦值 125
2.8.4 初始化器列表 125
2.8.5 資源管理 125
第3章 泛型編程 126
3.1 函數(shù)模板 126
3.1.1 實例化 127
3.1.2 參數(shù)類型推導(dǎo) 128
3.1.3 處理模板中的異常 132
3.1.4 混合類型 133
3.1.5 統(tǒng)一初始化 134
3.1.6 自動返回的類型 134
3.1.7 模板參數(shù)簡化 135
3.2 命名空間和函數(shù)查找 135
3.2.1 命名空間 135
3.2.2 參數(shù)依賴查找 138
3.2.3 命名空間限定和ADL 142
3.3 類模板 144
3.3.1 容器示例 144
3.3.2 設(shè)計統(tǒng)一的類和函數(shù)接口 146
3.4 類型推導(dǎo)和定義 151
3.4.1 自動變量類型 152
3.4.2 表達式的類型 152
3.4.3 decltype(auto) 153
3.4.4 類模板參數(shù)推導(dǎo) 154
3.4.5 推導(dǎo)多種類型 156
3.4.6 定義類型 157
3.5 模板特例化 159
3.5.1 為某種類型特例化一個類 159
3.5.2 函數(shù)特例化和重載 162
3.5.3 類的偏特化 163
3.5.4 偏特化函數(shù) 164
3.5.5 用戶自定義類型的結(jié)構(gòu)化綁定 166
3.5.6 用戶自定義格式化 169
3.6 模板的非類型參數(shù) 171
3.6.1 固定大小的容器 171
3.6.2 推導(dǎo)非類型參數(shù) 173
3.7 函子 174
3.7.1 類函數(shù)參數(shù) 176
3.7.2 組合函子 177
3.7.3 遞歸 178
3.7.4 泛型規(guī)約 181
3.8 lambda表達式 182
3.8.1 捕獲 183
3.8.2 泛型lambda 186
3.9 變量模板 188
3.10 概念編程 190
3.10.1 定義概念 191
3.10.2 通過概念分發(fā) 194
3.10.3 類中的概念 195
3.10.4 概念設(shè)計 197
3.11 可變參數(shù)模板 197
3.11.1 遞歸函數(shù) 197
3.11.2 直接展開 199
3.11.3 索引序列 200
3.11.4 折疊表達式 202
3.11.5 類型生成器 202
3.11.6 增長測試 203
3.12 練習(xí) 205
3.12.1 字符串表達 205
3.12.2 元組的字符串表達 205
3.12.3 泛型堆棧 205
3.12.4 帶類型參數(shù)的有理數(shù) 205
3.12.5 向量的迭代器 206
3.12.6 奇數(shù)迭代器 206
3.12.7 奇數(shù)范圍 206
3.12.8 bool堆棧 206
3.12.9 自定義大小的堆棧 206
3.12.10 梯形法則 207
3.12.11 帶靜態(tài)函數(shù)的部分特例化 207
3.12.12 Functor函子 207
3.12.13 Lambda 207
3.12.14 實現(xiàn) make_unique 207
第4章 程序庫 208
4.1 標(biāo)準(zhǔn)模板庫 208
4.1.1 入門示例 209
4.1.2 迭代器 209
4.1.3 容器 214
4.1.4 算法 223
4.1.5 范圍(Range) 228
4.1.6 并行計算 234
4.2 數(shù)值計算 236
4.2.1 復(fù)數(shù) 236
4.2.2 隨機數(shù)生成器 239
4.2.3 數(shù)學(xué)專用函數(shù) 247
4.2.4 數(shù)學(xué)常量 248
4.3 元編程 249
4.3.1 極限(limits) 250
4.3.2 類型特征 251
4.4 實用程序 253
4.4.1 optional 253
4.4.2 元組(tuple) 254
4.4.3 variant 256
4.4.4 any 258
4.4.5 string_view 259
4.4.6 span 260
4.4.7 function 261
4.4.8 引用包裝器 263
4.5 關(guān)于時間 264
4.6 并發(fā)編程 267
4.6.1 專用術(shù)語 267
4.6.2 概述 267
4.6.3 thread 268
4.6.4 關(guān)于調(diào)用者 269
4.6.5 異步調(diào)用 271
4.6.6 異步解析器 272
4.6.7 可變互斥鎖 277
4.6.8 協(xié)程 278
4.6.9 其他新的并發(fā)特性 280
4.7 高級科學(xué)軟件庫 280
4.7.1 替代算法 280
4.7.2 區(qū)間運算 281
4.7.3 線性代數(shù) 281
4.7.4 常微分方程 281
4.7.5 偏微分方程 282
4.7.6 圖形算法 282
4.8 練習(xí) 282
4.8.1 根據(jù)大小排序 282
4.8.2 將lambda表達式作為謂詞進行
查找 282
4.8.3 STL 容器 283
4.8.4 復(fù)數(shù) 283
4.8.5 并行的向量加法 284
4.8.6 重構(gòu)并行加法 284
第5章 元編程 285
5.1 讓編譯器計算 285
5.1.1 編譯期函數(shù) 285
5.1.2 擴展編譯期函數(shù) 287
5.1.3 素數(shù) 289
5.1.4 常量的恒定性 291
5.1.5 編譯期lambda表達式 292
5.2 提供和使用類型信息 293
5.2.1 類型特征 294
5.2.2 條件異常處理 297
5.2.3 const簡潔視圖用例 298
5.2.4 參數(shù)化有理數(shù) 304
5.2.5 特定領(lǐng)域的類型屬性 306
5.2.6 enable_if 307
5.2.7 可變參數(shù)模板的優(yōu)化 311
5.3 表達式模板 314
5.3.1 簡單的操作符 314
5.3.2 表達式模板類 317
5.3.3 泛型表達式模板 320
5.3.4 在數(shù)據(jù)過期之前復(fù)制 321
5.4 元調(diào)優(yōu):編寫自定義編譯器優(yōu)化 323
5.4.1 經(jīng)典的固定尺寸展開 325
5.4.2 嵌套展開 327
5.4.3 動態(tài)展開 332
5.4.4 展開向量表達式 334
5.4.5 優(yōu)化表達式模板 335
5.4.6 調(diào)優(yōu)簡化操作 338
5.4.7 嵌套循環(huán)調(diào)優(yōu) 345
5.4.8 調(diào)優(yōu)小結(jié) 348
5.5 語義概念優(yōu)化 349
5.5.1 語義調(diào)優(yōu)的需求 350
5.5.2 語義概念層次 353
5.6 圖靈完備性 355
5.7 練習(xí) 357
5.7.1 類型特征 357
5.7.2 斐波那契數(shù)列 357
5.7.3 最大公約數(shù)元程序 358
5.7.4 混合類型的有理數(shù) 358
5.7.5 向量表達式模板 358
5.7.6 元列表 359
第6章 面向?qū)ο缶幊?360
6.1 基本原則 360
6.1.1 基類和派生類 361
6.1.2 繼承構(gòu)造函數(shù) 364
6.1.3 虛函數(shù)和多態(tài)類 365
6.1.4 通過繼承實現(xiàn)函子 371
6.1.5 派生Exception類 372
6.2 去除冗余 374
6.3 多重繼承 375
6.3.1 多個父類 375
6.3.2 普通的“祖父母” 376
6.4 子類型的動態(tài)選擇 381
6.5 轉(zhuǎn)型 384
6.5.1 基類和派生類之間的轉(zhuǎn)換 384
6.5.2 常量轉(zhuǎn)型 388
6.5.3 重新解析的轉(zhuǎn)型 388
6.5.4 函數(shù)式轉(zhuǎn)型 388
6.5.5 隱式轉(zhuǎn)換 390
6.6 高級技術(shù) 391
6.6.1 CRTP 391
6.6.2 包含重載的類型特征 395
6.7 練習(xí) 399
6.7.1 非冗余菱形 399
6.7.2 繼承向量類 399
6.7.3 重構(gòu)向量中的異常 399
6.7.4 拋出異常測試 399
6.7.5 Clone 函數(shù) 400
第7章 科學(xué)項目 401
7.1 ODE解析器的實現(xiàn) 401
7.1.1 常微分方程 401
7.1.2 Runge-Kutta算法 403
7.1.3 泛型實現(xiàn) 404
7.1.4 展望 411
7.2 創(chuàng)建項目 412
7.2.1 構(gòu)建過程 412
7.2.2 構(gòu)建工具 416
7.2.3 單獨編譯 420
7.3 模塊 423
7.4 結(jié)語 427
附錄A 程序庫 428
A.1 科學(xué)軟件的優(yōu)劣 428
A.2 基本的細(xì)節(jié) 434
A.2.1 靜態(tài)變量 434
A.2.2 關(guān)于if語句 435
A.2.3 達夫設(shè)備 436
A.2.4 程序調(diào)用 436
A.2.5 斷言和異常 437
A.2.6 二進制I/O 438
A.2.7 C風(fēng)格的 I/O 439
A.2.8 垃圾回收機制 440
A.2.9 宏的問題 440
A.3 實際用例:矩陣轉(zhuǎn)置 442
A.4 類的詳細(xì)信息 451
A.4.1 指向成員的指針 451
A.4.2 更多初始化示例 451
A.4.3 訪問多維數(shù)據(jù)結(jié)構(gòu) 452
A.5 方法生成 455
A.5.1 自動生成 455
A.5.2 控制生成 458
A.5.3 生成規(guī)則 458
A.5.4 設(shè)計指南和不足 462
A.6 模板 465
A.6.1 統(tǒng)一初始化 465
A.6.2 函數(shù)調(diào)用 466
A.6.3 為特定硬件特例化 469
A.6.4 可變參數(shù)二進制I/O 470
A.7 關(guān)于軟件庫的更多信息 471
A.7.1 在C++03中使用std::vector 471
A.7.2 可變參數(shù) 471
A.8 舊式的動態(tài)選擇 472
A.9 元編程 473
A.9.1 歷史上的第 一個元編程 473
A.9.2 元函數(shù) 475
A.9.3 向后兼容的靜態(tài)斷言 477
A.9.4 匿名類型參數(shù) 477
A.10 鏈接到C代碼 480
附錄B 編程工具 483
B.1 g++ 483
B.2 調(diào)試 484
B.2.1 基于文本的調(diào)試器 484
B.2.2 圖形化界面調(diào)試工具:DDD 486
B.3 內(nèi)存分析 488
B.4 gnuplot 489
B.5 UNIX、Linux和macOS 490
附錄C 語言規(guī)范 492
C.1 值類別 492
C.2 操作符概要 493
C.3 轉(zhuǎn)換規(guī)則 496
C.3.1 提升 496
C.3.2 其他轉(zhuǎn)換 496
C.3.3 常用的算術(shù)轉(zhuǎn)換 497
C.3.4 窄化 498
參考資料 499