C++現(xiàn)代編程技術(shù)寫(xiě)給工程師的C++教程
定 價(jià):129.8 元
- 作者:[德]彼得·哥特史林(Peter Gottschling)
- 出版時(shí)間:2024/7/1
- ISBN:9787115637642
- 出 版 社:人民郵電出版社
- 中圖法分類(lèi):TP312.8
- 頁(yè)碼:501
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
在科學(xué)和工程領(lǐng)域,很多軟件都是用C++來(lái)實(shí)現(xiàn)的。隨著軟件項(xiàng)目的規(guī)模越來(lái)越大,C++的優(yōu)勢(shì)更加突出。C++既能夠支持足夠貼近硬件層面的編程工作,又能夠駕馭高級(jí)抽象的編程需求。因此,全面掌握C++語(yǔ)言的語(yǔ)法及新特性,對(duì)開(kāi)發(fā)者非常重要。
本書(shū)由淺入深地介紹了C++編程的方方面面,涉及C++基礎(chǔ)、類(lèi)、泛型編程、程序庫(kù)、元編程、面向?qū)ο缶幊獭⒖茖W(xué)項(xiàng)目等內(nèi)容,還通過(guò)3個(gè)附錄(程序庫(kù)、編程工具、語(yǔ)言規(guī)范)全面介紹了一些拓展知識(shí)。
本書(shū)適合想全面學(xué)習(xí)C++編程的讀者以及對(duì)C++新特性感興趣的讀者閱讀參考。
本書(shū)是你掌握 C++ 編程精髓的得力助手。無(wú)論你是硬件底層的編程高手,還是追求高級(jí)抽象思維的軟件工程師,本書(shū)都將引領(lǐng)你深入C++的每一個(gè)層面。
本書(shū)緊跟 C++17 和 C++20 的新標(biāo)準(zhǔn),通過(guò)豐富多樣的技術(shù)案例,為你呈現(xiàn) C++ 編程的強(qiáng)大魅力。
本書(shū)由資深C++教育專(zhuān)家彼得·哥特史林(Peter Gottschling)編寫(xiě),結(jié)合其在物理、數(shù)學(xué)、工程領(lǐng)域的教學(xué)經(jīng)驗(yàn),為你細(xì)致解讀C++的高級(jí)特性,帶你領(lǐng)略從基礎(chǔ)到高級(jí)的編程藝術(shù)。
無(wú)論你的編程經(jīng)驗(yàn)如何,你都將快速掌握 lambda 表達(dá)式、可變參數(shù)模板等日益強(qiáng)大的C++特性。
彼得·哥特史林(Peter Gottschling)專(zhuān)注于開(kāi)發(fā)行業(yè)領(lǐng)先的科學(xué)計(jì)算軟件,是 ISO C++ 標(biāo)準(zhǔn)委員會(huì)成員,德國(guó)編程語(yǔ)言標(biāo)準(zhǔn)委員會(huì)主席,以及德累斯頓 C++ 用戶組的創(chuàng)始人。曾就讀于德累斯頓工業(yè)大學(xué),并同時(shí)學(xué)習(xí)了數(shù)學(xué)和計(jì)算機(jī)科學(xué)兩門(mén)專(zhuān)業(yè),分別獲得學(xué)士學(xué)位和博士學(xué)位。
第 1章 C++基礎(chǔ) 1
1.1 我們的第 一個(gè)程序 1
1.2 變量 3
1.2.1 內(nèi)置類(lè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 訪問(wèn)操作符 19
1.3.8 類(lèi)型處理 19
1.3.9 異常處理 20
1.3.10 操作符重載 20
1.3.11 操作符優(yōu)先級(jí) 20
1.3.12 避免歧義 21
1.4 表達(dá)式和語(yǔ)句 23
1.4.1 表達(dá)式 23
1.4.2 語(yǔ)句 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 不要引用過(guò)期數(shù)據(jù) 61
1.8.7 數(shù)組的容器 62
1.9 結(jié)構(gòu)化的軟件項(xiàng)目 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章 類(lèi) 72
2.1 為通用性編程而不局限于技術(shù)細(xì)節(jié) 72
2.2 成員 74
2.2.1 成員變量 74
2.2.2 可訪問(wèn)性 75
2.2.3 訪問(wèn)操作符 77
2.2.4 類(lèi)的靜態(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 移動(dòng)語(yǔ)義 93
2.3.6 通過(guò)字面量構(gòu)造對(duì)象 102
2.4 析構(gòu)函數(shù) 104
2.4.1 實(shí)現(xiàn)規(guī)則 104
2.4.2 妥善處理資源 104
2.5 方法生成總結(jié) 110
2.6 訪問(wèn)成員變量 111
2.6.1 訪問(wèn)函數(shù) 111
2.6.2 下標(biāo)操作符 112
2.6.3 常量成員函數(shù) 113
2.6.4 引用限定的成員 114
2.7 操作符重載的設(shè)計(jì) 116
2.7.1 保持一致性 116
2.7.2 優(yōu)先級(jí) 117
2.7.3 成員函數(shù)和自由函數(shù) 117
2.7.4 重載等式 119
2.7.5 重載“飛船”運(yùn)算符 121
2.7.6 重載中的類(lèi)型系統(tǒng) 123
2.8 練習(xí) 124
2.8.1 多項(xiàng)式 124
2.8.2 有理數(shù) 124
2.8.3 移動(dòng)賦值 125
2.8.4 初始化器列表 125
2.8.5 資源管理 125
第3章 泛型編程 126
3.1 函數(shù)模板 126
3.1.1 實(shí)例化 127
3.1.2 參數(shù)類(lèi)型推導(dǎo) 128
3.1.3 處理模板中的異常 132
3.1.4 混合類(lèi)型 133
3.1.5 統(tǒng)一初始化 134
3.1.6 自動(dòng)返回的類(lèi)型 134
3.1.7 模板參數(shù)簡(jiǎn)化 135
3.2 命名空間和函數(shù)查找 135
3.2.1 命名空間 135
3.2.2 參數(shù)依賴查找 138
3.2.3 命名空間限定和ADL 142
3.3 類(lèi)模板 144
3.3.1 容器示例 144
3.3.2 設(shè)計(jì)統(tǒng)一的類(lèi)和函數(shù)接口 146
3.4 類(lèi)型推導(dǎo)和定義 151
3.4.1 自動(dòng)變量類(lèi)型 152
3.4.2 表達(dá)式的類(lèi)型 152
3.4.3 decltype(auto) 153
3.4.4 類(lèi)模板參數(shù)推導(dǎo) 154
3.4.5 推導(dǎo)多種類(lèi)型 156
3.4.6 定義類(lèi)型 157
3.5 模板特例化 159
3.5.1 為某種類(lèi)型特例化一個(gè)類(lèi) 159
3.5.2 函數(shù)特例化和重載 162
3.5.3 類(lèi)的偏特化 163
3.5.4 偏特化函數(shù) 164
3.5.5 用戶自定義類(lèi)型的結(jié)構(gòu)化綁定 166
3.5.6 用戶自定義格式化 169
3.6 模板的非類(lèi)型參數(shù) 171
3.6.1 固定大小的容器 171
3.6.2 推導(dǎo)非類(lèi)型參數(shù) 173
3.7 函子 174
3.7.1 類(lèi)函數(shù)參數(shù) 176
3.7.2 組合函子 177
3.7.3 遞歸 178
3.7.4 泛型規(guī)約 181
3.8 lambda表達(dá)式 182
3.8.1 捕獲 183
3.8.2 泛型lambda 186
3.9 變量模板 188
3.10 概念編程 190
3.10.1 定義概念 191
3.10.2 通過(guò)概念分發(fā) 194
3.10.3 類(lèi)中的概念 195
3.10.4 概念設(shè)計(jì) 197
3.11 可變參數(shù)模板 197
3.11.1 遞歸函數(shù) 197
3.11.2 直接展開(kāi) 199
3.11.3 索引序列 200
3.11.4 折疊表達(dá)式 202
3.11.5 類(lèi)型生成器 202
3.11.6 增長(zhǎng)測(cè)試 203
3.12 練習(xí) 205
3.12.1 字符串表達(dá) 205
3.12.2 元組的字符串表達(dá) 205
3.12.3 泛型堆棧 205
3.12.4 帶類(lèi)型參數(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 實(shí)現(xiàn) make_unique 207
第4章 程序庫(kù) 208
4.1 標(biāo)準(zhǔn)模板庫(kù) 208
4.1.1 入門(mén)示例 209
4.1.2 迭代器 209
4.1.3 容器 214
4.1.4 算法 223
4.1.5 范圍(Range) 228
4.1.6 并行計(jì)算 234
4.2 數(shù)值計(jì)算 236
4.2.1 復(fù)數(shù) 236
4.2.2 隨機(jī)數(shù)生成器 239
4.2.3 數(shù)學(xué)專(zhuān)用函數(shù) 247
4.2.4 數(shù)學(xué)常量 248
4.3 元編程 249
4.3.1 極限(limits) 250
4.3.2 類(lèi)型特征 251
4.4 實(shí)用程序 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)于時(shí)間 264
4.6 并發(fā)編程 267
4.6.1 專(zhuān)用術(shù)語(yǔ) 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 高級(jí)科學(xué)軟件庫(kù) 280
4.7.1 替代算法 280
4.7.2 區(qū)間運(yùn)算 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表達(dá)式作為謂詞進(jìn)行
查找 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 讓編譯器計(jì)算 285
5.1.1 編譯期函數(shù) 285
5.1.2 擴(kuò)展編譯期函數(shù) 287
5.1.3 素?cái)?shù) 289
5.1.4 常量的恒定性 291
5.1.5 編譯期lambda表達(dá)式 292
5.2 提供和使用類(lèi)型信息 293
5.2.1 類(lèi)型特征 294
5.2.2 條件異常處理 297
5.2.3 const簡(jiǎn)潔視圖用例 298
5.2.4 參數(shù)化有理數(shù) 304
5.2.5 特定領(lǐng)域的類(lèi)型屬性 306
5.2.6 enable_if 307
5.2.7 可變參數(shù)模板的優(yōu)化 311
5.3 表達(dá)式模板 314
5.3.1 簡(jiǎn)單的操作符 314
5.3.2 表達(dá)式模板類(lèi) 317
5.3.3 泛型表達(dá)式模板 320
5.3.4 在數(shù)據(jù)過(guò)期之前復(fù)制 321
5.4 元調(diào)優(yōu):編寫(xiě)自定義編譯器優(yōu)化 323
5.4.1 經(jīng)典的固定尺寸展開(kāi) 325
5.4.2 嵌套展開(kāi) 327
5.4.3 動(dòng)態(tài)展開(kāi) 332
5.4.4 展開(kāi)向量表達(dá)式 334
5.4.5 優(yōu)化表達(dá)式模板 335
5.4.6 調(diào)優(yōu)簡(jiǎn)化操作 338
5.4.7 嵌套循環(huán)調(diào)優(yōu) 345
5.4.8 調(diào)優(yōu)小結(jié) 348
5.5 語(yǔ)義概念優(yōu)化 349
5.5.1 語(yǔ)義調(diào)優(yōu)的需求 350
5.5.2 語(yǔ)義概念層次 353
5.6 圖靈完備性 355
5.7 練習(xí) 357
5.7.1 類(lèi)型特征 357
5.7.2 斐波那契數(shù)列 357
5.7.3 最大公約數(shù)元程序 358
5.7.4 混合類(lèi)型的有理數(shù) 358
5.7.5 向量表達(dá)式模板 358
5.7.6 元列表 359
第6章 面向?qū)ο缶幊?360
6.1 基本原則 360
6.1.1 基類(lèi)和派生類(lèi) 361
6.1.2 繼承構(gòu)造函數(shù) 364
6.1.3 虛函數(shù)和多態(tài)類(lèi) 365
6.1.4 通過(guò)繼承實(shí)現(xiàn)函子 371
6.1.5 派生Exception類(lèi) 372
6.2 去除冗余 374
6.3 多重繼承 375
6.3.1 多個(gè)父類(lèi) 375
6.3.2 普通的“祖父母” 376
6.4 子類(lèi)型的動(dòng)態(tài)選擇 381
6.5 轉(zhuǎn)型 384
6.5.1 基類(lèi)和派生類(lèi)之間的轉(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 高級(jí)技術(shù) 391
6.6.1 CRTP 391
6.6.2 包含重載的類(lèi)型特征 395
6.7 練習(xí) 399
6.7.1 非冗余菱形 399
6.7.2 繼承向量類(lèi) 399
6.7.3 重構(gòu)向量中的異常 399
6.7.4 拋出異常測(cè)試 399
6.7.5 Clone 函數(shù) 400
第7章 科學(xué)項(xiàng)目 401
7.1 ODE解析器的實(shí)現(xiàn) 401
7.1.1 常微分方程 401
7.1.2 Runge-Kutta算法 403
7.1.3 泛型實(shí)現(xiàn) 404
7.1.4 展望 411
7.2 創(chuàng)建項(xiàng)目 412
7.2.1 構(gòu)建過(guò)程 412
7.2.2 構(gòu)建工具 416
7.2.3 單獨(dú)編譯 420
7.3 模塊 423
7.4 結(jié)語(yǔ) 427
附錄A 程序庫(kù) 428
A.1 科學(xué)軟件的優(yōu)劣 428
A.2 基本的細(xì)節(jié) 434
A.2.1 靜態(tài)變量 434
A.2.2 關(guān)于if語(yǔ)句 435
A.2.3 達(dá)夫設(shè)備 436
A.2.4 程序調(diào)用 436
A.2.5 斷言和異常 437
A.2.6 二進(jìn)制I/O 438
A.2.7 C風(fēng)格的 I/O 439
A.2.8 垃圾回收機(jī)制 440
A.2.9 宏的問(wèn)題 440
A.3 實(shí)際用例:矩陣轉(zhuǎn)置 442
A.4 類(lèi)的詳細(xì)信息 451
A.4.1 指向成員的指針 451
A.4.2 更多初始化示例 451
A.4.3 訪問(wèn)多維數(shù)據(jù)結(jié)構(gòu) 452
A.5 方法生成 455
A.5.1 自動(dòng)生成 455
A.5.2 控制生成 458
A.5.3 生成規(guī)則 458
A.5.4 設(shè)計(jì)指南和不足 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ù)二進(jìn)制I/O 470
A.7 關(guān)于軟件庫(kù)的更多信息 471
A.7.1 在C++03中使用std::vector 471
A.7.2 可變參數(shù) 471
A.8 舊式的動(dòng)態(tài)選擇 472
A.9 元編程 473
A.9.1 歷史上的第 一個(gè)元編程 473
A.9.2 元函數(shù) 475
A.9.3 向后兼容的靜態(tài)斷言 477
A.9.4 匿名類(lèi)型參數(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 語(yǔ)言規(guī)范 492
C.1 值類(lèi)別 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