会员   密码 您忘记密码了吗?
1,576,569 本书已上架      购物流程 | 常见问题 | 联系我们 | 关于我们 | 用户协议

有店 App


当前分类

商品分类

当前位置: 首页 > 简体书 > C++ Templates(第2版)(中文版)
C++ Templates(第2版)(中文版)
上一张
下一张
prev next

C++ Templates(第2版)(中文版)

作者: (美)戴維·范德沃德,(德)尼古拉·M.約祖蒂斯,(美)道格拉斯·格雷戈
出版社: 人民郵電出版社
出版日期: 2024-01-01
商品库存: 点击查询库存
以上库存为海外库存属流动性。
可选择“空运”或“海运”配送,空运费每件商品是RM14。
配送时间:空运约8~12个工作天,海运约30个工作天。
(以上预计配送时间不包括出版社库存不足需调货及尚未出版的新品)
定价:   NT899.00
市场价格: RM161.62
本店售价: RM143.84
促销价: RM142.23
剩余时间: 请稍等, 正在载入中...
购买数量:
collect Add to cart Add booking
详细介绍 商品属性 商品标记
內容簡介

本書是一本全面介紹C++範本技術的圖書,主要內容涵蓋C++範本的基礎概念、語言細節、編程技巧、高級應用以及實用示例等。本書針對C++11、C++14、C++17標準進行了內容更新,並對很多新語言特性(包括變數範本、泛型lambda、類範本參數推導等)給出詳細解釋。通過閱讀本書,讀者可以深入理解C++範本技術,掌握開發有效、簡潔且易維護的軟體的原因、時機和方法。 本書內容豐富,架構清晰,講解翔實,適合對C++範本技術感興趣的開發人員或愛好者閱讀。


作者介紹

David Vandevoorde是Edison Design Group公司的工程副總裁,負責設計公司C 編譯器的關鍵功能。他是comp.lang.c .moderated論壇的創辦人之一,也是C 標準化的積極參與者。他擁有倫斯勒理工學院的電腦科學博士學位和碩士學位,以及布魯塞爾自由大學的工程碩士學位。他的技術興趣包括演算法開發和培訓。
 
Nicolai M. Josuttis是一名獨立的系統架構師、技術經理、顧問和培訓師,20多年來一直活躍在C 標準化領域。作為庫工作組的成員,他特別關注普通開發人員的觀點。他是《C 標準庫(第2版)》等圖書的作者。
 
Douglas Gregor是一名經驗豐富的編譯器開發人員,具有C 庫設計背景。作為Boost的早期貢獻者,他開發的多個庫已成為C 標準的一部分。後來,他作為代碼所有者負責開源Clang C 編譯器的實施,直至完成對C 11的支援,並積極參與了C 11的標準化工作。他擁有倫斯勒理工學院的電腦科學博士學位。


目錄

第一部分 基礎知識
第1章 函數範本 2
1.1 函數範本初探 2
1.1.1 定義範本 2
1.1.2 使用範本 3
1.1.3 兩階段編譯 4
1.2 範本實參推導簡介 5
1.3 多範本參數 7
1.3.1 返回類型的範本參數 7
1.3.2 推導返回類型 8
1.3.3 返回類型為公共類型 9
1.4 預設範本實參簡介 10
1.5 重載函數範本簡介 11
1.6 難道,我們不應該…… 16
1.6.1 傳值還是傳引用 16
1.6.2 為什麼不使用inline 16
1.6.3 為什麼不使用constexpr 16
1.7 小結 17
第2章 類範本 18
2.1 類範本Stack的實現 18
2.1.1 類範本的聲明 19
2.1.2 成員函數的實現 20
2.2 類範本Stack的使用 21
2.3 部分使用類範本 22
2.4 友元簡介 24
2.5 類範本的特化 25
2.6 偏特化 26
2.7 預設類範本實參 28
2.8 類型別名 30
2.9 類範本實參推導 32
2.10 範本化聚合體 35
2.11 小結 35
第3章 非類型範本參數 36
3.1 非類型的類範本參數 36
3.2 非類型的函數範本參數 38
3.3 非類型範本參數的限制 39
3.4 範本參數類型auto 40
3.5 小結 43
第4章 變參範本 44
4.1 變參範本簡介 44
4.1.1 變參範本示例 44
4.1.2 變參和非變參範本的重載 45
4.1.3 sizeof...運算子 46
4.2 折疊運算式 46
4.3 變參範本應用 48
4.4 變參類範本和變參運算式 49
4.4.1 變參運算式 49
4.4.2 變參索引 50
4.4.3 變參類範本 51
4.4.4 變參推導指引 52
4.4.5 變參基類和using關鍵字 52
4.5 小結 54
第5章 基本技巧 55
5.1 關鍵字typename 55
5.2 零初始化 56
5.3 使用this-> 58
5.4 處理原始數組和字串字面量的範本 58
5.5 成員範本 60
5.5.1 .template構造 65
5.5.2 泛型lambda和成員範本 65
5.6 變數範本 66
5.7 範本的範本參數簡介 68
5.8 小結 73
第6章 移動語義和enable_if<> 74
6.1 完美轉發簡介 74
6.2 特殊成員函數範本 77
6.3 通過std::enable_if<>禁用 範本 79
6.4 使用enable_if<> 81
6.5 使用概念簡化enable_if<> 運算式 84
6.6 小結 85
第7章 傳值還是傳引用 86
7.1 傳值 86
7.2 傳引用 88
7.2.1 傳遞常量引用 88
7.2.2 傳遞非常量引用 90
7.2.3 傳遞轉發引用 91
7.3 使用std::ref()和std::cref() 92
7.4 處理字串字面量和原始 數組 94
7.5 處理返回值 95
7.6 推薦的範本參數聲明方法 97
7.7 小結 99
第8章 編譯期編程 100
8.1 範本元編程 100
8.2 使用constexpr計算 102
8.3 偏特化的執行路徑選擇 103
8.4 SFINAE 104
8.5 編譯期if簡介 108
8.6 小結 110
第9章 在實踐中使用範本 111
9.1 包含模型簡介 111
9.1.1 連結器錯誤 111
9.1.2 標頭檔中的範本 112
9.2 範本和inline 113
9.3 預編譯標頭檔 114
9.4 破譯大篇錯誤資訊 115
9.5 後記 122
9.6 小結 122
第10章 範本基本術語 123
10.1 是“類範本”還是 “範本類” 123
10.2 替換、產生實體和特化 123
10.3 聲明和定義 124
10.4 單一定義規則 126
10.5 範本實參和範本形參 126
10.6 小結 127
第11章 泛型庫 128
11.1 可調用物件 128
11.1.1 函數對象的支援 128
11.1.2 處理成員函數及額外的 參數 130
11.1.3 封裝函數調用 132
11.2 實現泛型庫的其他工具 133
11.2.1 類型特徵 133
11.2.2 std::addressof() 135
11.2.3 std::declval() 135
11.3 完美轉發臨時變數 136
11.4 作為範本參數的引用 137
11.5 推遲估算 140
11.6 關於泛型庫的思考 141
11.7 小結 141

第二部分 深入範本
第12章 深入範本基礎 144
12.1 參數化的聲明 144
12.1.1 虛成員函數 148
12.1.2 範本的連結 148
12.1.3 主範本 150
12.2 範本參數 150
12.2.1 類型參數 150
12.2.2 非類型參數 151
12.2.3 範本的範本參數 152
12.2.4 範本參數包 153
12.2.5 預設範本實參 154
12.3 範本實參 156
12.3.1 函數範本實參 156
12.3.2 類型實參 158
12.3.3 非類型範本實參 158
12.3.4 範本的範本實參 160
12.3.5 實參的等價性 162
12.4 變參範本 163
12.4.1 包擴展 163
12.4.2 包擴展的時機 164
12.4.3 函數參數包 166
12.4.4 多重和嵌套包擴展 167
12.4.5 零長度包擴展 168
12.4.6 折疊運算式 169
12.5 友元 170
12.5.1 類範本的友元類 170
12.5.2 類範本的友元函數 171
12.5.3 友元範本 173
12.6 後記 174
第13章 範本中的名稱 175
13.1 名稱的分類 175
13.2 名稱查找 177
13.2.1 依賴於參數的查找 178
13.2.2 依賴於參數的友元 聲明的查找 179
13.2.3 注入的類名稱 180
13.2.4 當前的產生實體 181
13.3 解析範本 183
13.3.1 非範本中的上下文 相關性 183
13.3.2 依賴類型的名稱 186
13.3.3 依賴範本的名稱 188
13.3.4 using聲明中的依賴型 名稱 189
13.3.5 ADL和顯式範本實參 190
13.3.6 依賴型運算式 190
13.3.7 編譯器錯誤 192
13.4 繼承和類範本 193
13.4.1 非依賴型基類 193
13.4.2 依賴型基類 194
13.5 後記 196
第14章 產生實體 198
14.1 按需產生實體 198
14.2 延遲產生實體 200
14.2.1 部分和完全產生實體 200
14.2.2 產生實體組件 200
14.3 C 的產生實體模型 203
14.3.1 兩階段查找 203
14.3.2 產生實體點 204
14.3.3 包含模型 207
14.4 實現方案 207
14.4.1 貪婪產生實體 209
14.4.2 查詢產生實體 210
14.4.3 反覆運算產生實體 211
14.5 顯式產生實體 212
14.5.1 手動產生實體 212
14.5.2 顯式產生實體聲明 214
14.6 編譯期的if語句 215
14.7 標準庫 216
14.8 後記 217
第15章 範本實參推導 218
15.1 推導的過程 218
15.2 推導的上下文 220
15.3 特殊的推導情況 221
15.4 初始化列表 222
15.5 參數包 223
15.6 右值引用 225
15.6.1 引用折疊規則 225
15.6.2 轉發引用 226
15.6.3 完美轉發 227
15.6.4 推導的意外情況 229
15.7 SFINAE 230
15.8 推導的限制 233
15.8.1 可行的實參轉換 233
15.8.2 類範本實參 234
15.8.3 默認調用實參 234
15.8.4 異常規範 235
15.9 顯式函數範本參數 236
15.10 基於初始化器和運算式的 推導 238
15.10.1 auto類型的規範 238
15.10.2 使用decltype表示一個運算式的類型 242
15.10.3 decltype(auto) 244
15.10.4 auto推導的特殊 情況 246
15.10.5 結構化綁定 249
15.10.6 泛型lambda運算式 252
15.11 別名範本 254
15.12 類範本參數推導 255
15.12.1 推導指引 256
15.12.2 隱式推導指引 257
15.12.3 其他 259
15.13 後記 262
第16章 特化與重載 264
16.1 當“泛型代碼”不是特別適用的時候 264
16.1.1 透明自訂 265
16.1.2 語義的透明性 266
16.2 重載函數範本 267
16.2.1 簽名 267
16.2.2 重載的函數範本的局部排序 269
16.2.3 正式的排序規則 270
16.2.4 範本和非範本 272
16.2.5 變參函數範本 274
16.3 顯式特化 276
16.3.1 全域的類範本特化 276
16.3.2 全域的函數範本特化 279
16.3.3 全域的變數範本特化 281
16.3.4 全域的成員特化 281
16.4 類範本偏特化 284
16.5 變數範本偏特化 287
16.6 後記 287
第17章 未來方向 289
17.1 寬鬆的typename規則 289
17.2 廣義非類型範本參數 290
17.3 函數範本的偏特化 292
17.4 命名範本實參簡介 293
17.5 重載類範本 294
17.6 中間包擴展的演繹 294
17.7 void的規則化 295
17.8 範本的類型檢查 296
17.9 反射元編程 297
17.10 包管理工具 298
17.11 模組 299

第三部分 範本與設計
第18章 範本的多態 302
18.1 動多態 302
18.2 靜多態 304
18.3 動多態與靜多態 306
18.4 使用概念 308
18.5 新形式的設計模式 309
18.6 泛型程式設計 310
18.7 後記 312
第19章 特徵的實現 314
19.1 一個實例:累加一個序列 314
19.1.1 固定特徵 314
19.1.2 值特徵 317
19.1.3 參數化特徵 321
19.2 特徵、policy及policy類 321
19.2.1 特徵和policy的區別 323
19.2.2 成員範本和範本的範本 參數 324
19.2.3 組合多個policy和(或)特徵 325
19.2.4 運用普通的反覆運算器進行累積 325
19.3 類型函數 326
19.3.1 元素類型 327
19.3.2 轉換特徵 329
19.3.3 謂詞特徵 334
19.3.4 結果類型特徵 336
19.4 基於SFINAE的特徵 339
19.4.1 SFINAE函數重載 339
19.4.2 SFINAE偏特化 342
19.4.3 為SFINAE使用泛型lambda運算式 343
19.4.4 SFINAE友好的特徵 346
19.5 IsConvertibleT 349
19.6 檢測成員 351
19.6.1 檢測成員類型 351
19.6.2 檢測任意的成員類型 353
19.6.3 檢測nontype成員 354
19.6.4 使用泛型lambda檢測 成員 357
19.7 其他特徵技術 359
19.7.1 if-then-else 359
19.7.2 檢測nonthrowing 操作 362
19.7.3 特徵的便利性 364
19.8 類型分類 366
19.8.1 確定基本類型 366
19.8.2 確定複合類型 368
19.8.3 識別函數類型 371
19.8.4 確定類類型 372
19.8.5 確定枚舉類型 373
19.9 policy特徵 373
19.10 在標準庫中 376
19.11 後記 377
第20章 類型屬性重載 379
20.1 演算法特化 379
20.2 標籤調度 380
20.3 啟用/禁用函數範本 382
20.3.1 提供多種特化 383
20.3.2 EnableIf去往何處 385
20.3.3 編譯期if 386
20.3.4 術語 387
20.4 類特化 388
20.4.1 啟用/禁用類範本 388
20.4.2 類範本的標籤調度 390
20.5 產生實體安全範本 392
20.6 在標準庫中 396
20.7 後記 396
第 21章 範本與繼承 398
21.1 空基類優化 398
21.1.1 佈局原則 398
21.1.2 作為基類的成員 400
21.2 奇妙遞迴範本模式 402
21.2.1 Barton-Nackman 技巧 404
21.2.2 運算子實現 406
21.2.3 門面模式 407
21.3 混入 413
21.3.1 奇妙的混入 415
21.3.2 參數化的虛擬性 415
21.4 命名範本實參 416
21.5 後記 419
第22章 橋接靜多態與動多態 421
22.1 函數物件、指標以及std::function<> 421
22.2 泛化的函數指針 423
22.3 橋接介面 425
22.4 類型擦除 426
22.5 可選的橋接 427
22.6 性能考慮 429
22.7 後記 429
第23章 元編程 431
23.1 現代C 元編程的狀況 431
23.1.1 值元編程 431
23.1.2 類型元編程 432
23.1.3 混合元編程 433
23.1.4 單位類型的混合元編程 435
23.2 反射元編程的維度 437
23.3 遞迴產生實體的代價 438
23.4 計算完備性 441
23.5 遞迴產生實體還是遞迴範本實參 441
23.6 枚舉值還是靜態常量 442
23.7 後記 443
第24章 類型列表 446
24.1 解剖一個類型列表 446
24.2 類型清單演算法 448
24.2.1 索引 448
24.2.2 尋找最佳匹配 449
24.2.3 追加元素到類型 清單 451
24.2.4 反轉類型列表 453
24.2.5 轉化類型列表 454
24.2.6 累加類型列表 455
24.2.7 插入排序 457
24.3 非類型類型列表 459
24.4 使用包擴展來優化演算法 462
24.5 cons風格的類型列表 463
24.6 後記 465
第25章 元組 466
25.1 基礎元組設計 466
25.1.1 存儲 466
25.1.2 構造 468
25.2 基礎元組運算 469
25.2.1 比較 469
25.2.2 輸出 470
25.3 元組演算法 471
25.3.1 作為類型列表 471
25.3.2 增刪 472
25.3.3 反轉 473
25.3.4 索引清單 474
25.3.5 用索引清單反轉 475
25.3.6 重排和選擇 477
25.4 展開元組 480
25.5 優化元組 480
25.5.1 元組和EBCO 481
25.5.2 常數時間複雜度的get() 484
25.6 元組索引 485
25.7 後記 487
第26章 可辨識聯合體 489
26.1 存儲簡介 490
26.2 設計 491
26.3 值的查詢與提取 494
26.4 元素初始化、賦值和析構 495
26.4.1 初始化 495
26.4.2 析構 496
26.4.3 賦值 497
26.5 訪問者 500
26.5.1 訪問結果類型 503
26.5.2 公共結果類型 504
26.6 variant的初始化和賦值 505
26.7 後記 508
第27章 運算式範本 510
27.1 臨時變數和割裂的迴圈 510
27.2 在範本實參中對運算式編碼 514
27.2.1 運算式範本的操作數 515
27.2.2 Array類型 518
27.2.3 運算子 520
27.2.4 回顧 521
27.2.5 運算式範本賦值 523
27.3 運算式範本的性能與局限 524
27.4 後記 524
第 28章 調試範本 527
28.1 淺層產生實體 527
28.2 靜態斷言 529
28.3 原型 530
28.4 追蹤器 532
28.5 預言機 535
28.6 後記 536

附錄A 單一定義規則 537
A.1 編譯單元 537
A.2 聲明和定義 538
A.3 單一定義規則的細節 539
A.3.1 程式中的單一定義約束 539
A.3.2 編譯單元中的單一定義約束 540
A.3.3 跨編譯單元的等價性約束 542
附錄B 值類別 545
B.1 傳統的左值和右值 545
B.2 C 11值類別 546
B.3 使用decltype檢查值類別 549
B.4 參考類型 549
附錄C 重載解析 551
C.1 何時應用重載解析 551
C.2 簡化過的重載解析 552
C.2.1 成員函數的隱含實參 554
C.2.2 精細完美匹配 555
C.3 重載的細節 556
C.3.1 非範本優先或更特化的範本 557
C.3.2 轉換序列 557
C.3.3 指針的轉型 558
C.3.4 初始化列表 559
C.3.5 仿函數和代理函數 562
C.3.6 其他的重載情況 562
附錄D 標準庫類型實用程式 564
D.1 使用類型特徵 564
D.1.1 std::integral_constant和std::bool_constant 565
D.1.2 使用特徵時應該知道的事 566
D.2 基本和複合類型類別 567
D.2.1 基本類型類別的測試 567
D.2.2 複合類型類別的測試 571
D.3 類型屬性和操作 572
D.3.1 其他類型屬性 572
D.3.2 特定操作測試 580
D.3.3 類型之間的關係 587
D.4 類型構造 589
D.5 其他特徵 593
D.6 組合類型特徵 595
D.7 其他工具 596
附錄E 概念 598
E.1 使用概念 598
E.2 定義概念 600
E.3 約束的重載 602
E.3.1 約束的歸併 602
E.3.2 約束和標籤調度 603
E.4 概念小提示 604
E.4.1 測試概念 604
E.4.2 概念細微性 604
E.4.3 二進位相容性 605
術語表 607