TOP
0
0
魅麗。花火原創小說66折起
現代C++語言核心特性解析(簡體書)
滿額折

現代C++語言核心特性解析(簡體書)

人民幣定價:119.9 元
定  價:NT$ 719 元
優惠價:87626
領券後再享89折
無庫存,下單後進貨(採購期約45個工作天)
可得紅利積點:18 點
相關商品
商品簡介
作者簡介
名人/編輯推薦
目次

商品簡介

本書是一本C++進階圖書,全書分為42章,深入探討了從C++11到C++20引入的核心特性。書中不僅通過大量的實例代碼講解特性的概念和語法,還從編譯器的角度分析特性的實現原理,書中還穿插了C++標準委員會制定特性標準時的一些小故事,幫助讀者知其然也知其所以然。
本書適合因為工作需要學習C++新特性的C++從業者,同樣也適合對C++新特性非常感興趣的C++愛好者。而對於C++初學者來說,也有必要在理解C++基礎知識後,通過本書來領略C++的另外一道風景。

作者簡介

謝丙堃,從事 C++ 開發工作十餘年,先後在數家互聯網公司擔任 C++ 開發工程師和技術經理。他也是 C++ 語言的愛好者,熱衷於研究 C++ 語言的新特性以及 C++ 範本元程序設計技術。

名人/編輯推薦

1.通過理論結合實踐的內容編排,深入探討 C++11 到 C++20 引入的語言核心特性。
2.通過大量的實例代碼講解特性的概念和語法,並從編譯器的角度分析特性的實現原理。
3.本書提供作者的同步語音講解、PPT以及示例代碼等其它增值服務。
4.本書既能當作一本教材讓讀者由淺入深掌握新增特性的原理和方法,也可作為一本“字典”讓讀者有目的性的查閱單個特性。

目次

第 1章 新基礎類型(C++11~C++20) 1
1.1 整數類型long long 1
1.2 新字元類型char16_t和char32_t 4
1.2.1 字元集和編碼方法 4
1.2.2 使用新字元類型char16_t和char32_t 5
1.2.3 wchar_t存在的問題 6
1.2.4 新字元串連接 7
1.2.5 庫對新字元類型的支援 7
1.3 char8_t字元類型 8
1.4 總結 8
第 2章 內聯和嵌套命名空間(C++11~C++20) 9
2.1 內聯命名空間的定義和使用 9
2.2 嵌套命名空間的簡化語法 11
2.3 總結 13
第3章 auto預留位置(C++11~C++17) 14
3.1 重新定義的auto關鍵字 14
3.2 推導規則 16
3.3 什麼時候使用auto 18
3.4 返回類型推導 20
3.5 lambda運算式中使用auto類型推導 20
3.6 非類型範本形參預留位置 21
3.7 總結 22
第4章 decltype說明符(C++11~C++17) 23
4.1 回顧typeof和typeid 23
4.2 使用decltype說明符 24
4.3 推導規則 27
4.4 cv限定詞的推導 29
4.5 decltype(auto) 30
4.6 decltype(auto)作為非類型範本形參預留位置 31
4.7 總結 32
第5章 函數返回類型後置(C++11) 33
5.1 使用函數返回類型後置聲明函數 33
5.2 推導函數範本返回類型 34
5.3 總結 36
第6章 右值引用(C++11 C++17 C++20) 37
6.1 左值和右值 37
6.2 左值引用 39
6.3 右值引用 40
6.4 右值的性能優化空間 42
6.5 移動語義 43
6.6 值類別 47
6.7 將左值轉換為右值 48
6.8 萬能引用和引用折疊 50
6.9 完美轉發 52
6.10 針對區域變數和右值引用的隱式移動操作 55
6.11 總結 57
第7章 lambda運算式(C++11~C++20) 58
7.1 lambda運算式語法 58
7.2 捕獲列表 60
7.2.1 作用域 60
7.2.2 捕獲值和捕獲引用 61
7.2.3 特殊的捕獲方法 64
7.3 lambda運算式的實現原理 65
7.4 無狀態lambda運算式 68
7.5 在STL中使用lambda運算式 68
7.6 廣義捕獲 69
7.7 泛型lambda運算式 72
7.8 常量lambda運算式和捕獲*this 72
7.9 捕獲[=, this] 73
7.10 範本語法的泛型lambda運算式 74
7.11 可構造和可賦值的無狀態lambda運算式 76
7.12 總結 77
第8章 非靜態資料成員預設初始化(C++11 C++20) 78
8.1 使用默認初始化 78
8.2 位域的默認初始化 79
8.3 總結 80
第9章 列表初始化(C++11 C++20) 81
9.1 回顧變數初始化 81
9.2 使用列表初始化 82
9.3 std::initializer_list詳解 84
9.4 使用列表初始化的注意事項 86
9.4.1 隱式縮窄轉換問題 86
9.4.2 列表初始化的優先順序問題 87
9.5 指定初始化 88
9.6 總結 90
第 10章 預設和刪除函數(C++11) 91
10.1 類的特殊成員函數 91
10.2 顯式默認和顯式刪除 95
10.3 顯式刪除的其他用法 98
10.4 explicit和=delete 99
10.5 總結 100
第 11章 非受限聯合類型(C++11) 101
11.1 聯合類型在C++中的局限性 101
11.2 使用非受限聯合類型 102
11.3 總結 106
第 12章 委託構造函數(C++11) 107
12.1 冗餘的構造函數 107
12.2 委託構造函數 110
12.3 委託範本構造函數 114
12.4 捕獲委託構造函數的異常 115
12.5 委託參數較少的構造函數 116
12.6 總結 117
第 13章 繼承構造函數(C++11) 118
13.1 繼承關係中構造函數的困局 118
13.2 使用繼承構造函數 119
13.3 總結 123

第 14章 強枚舉類型(C++11 C++17 C++20) 124
14.1 枚舉類型的弊端 124
14.2 使用強枚舉類型 129
14.3 清單初始化有底層類型枚舉物件 131
14.4 使用using打開強枚舉類型 133
14.5 總結 135
第 15章 擴展的聚合類型(C++17 C++20) 136
15.1 聚合類型的新定義 136
15.2 聚合類型的初始化 137
15.3 擴展聚合類型的相容問題 139
15.4 禁止聚合類型使用使用者聲明的構造函數 140
15.5 使用帶小括號的清單初始化聚合類型物件 142
15.6 總結 143
第 16章 override和final說明符(C++11) 144
16.1 重寫、重載和隱藏 144
16.2 重寫引發的問題 145
16.3 使用override說明符 145
16.4 使用final說明符 146
16.5 override和final說明符的特別之處 148
16.6 總結 148
第 17章 基於範圍的for迴圈(C++11 C++17 C++20) 149
17.1 煩瑣的容器遍歷 149
17.2 基於範圍的for迴圈語法 150
17.3 begin和end函數不必返回相同類型 151
17.4 臨時範圍運算式的陷阱 152
17.5 實現一個支持基於範圍的for迴圈的類 153
17.6 總結 155
第 18章 支持初始化語句的if和switch(C++17) 156
18.1 支持初始化語句的if 156
18.2 支持初始化語句的switch 159
18.3 總結 160
第 19章 static_assert聲明 161
19.1 運行時斷言 161
19.2 靜態斷言的需求 162
19.3 靜態斷言 163
19.4 單參數static_assert 164
19.5 總結 165
第 20章 結構化綁定(C++17 C++20) 166
20.1 使用結構化綁定 166
20.2 深入理解結構化綁定 169
20.3 結構化綁定的3種類型 171
20.3.1 綁定到原生陣列 171
20.3.2 綁定到結構體和類物件 172
20.3.3 綁定到元組和類元組的物件 173
20.4 實現一個類元組類型 175
20.5 綁定的存取權限問題 178
20.6 總結 179
第 21章 noexcept關鍵字(C++11 C++17 C++20) 180
21.1 使用noexcept代替throw 180
21.2 用noexcept來解決移動構造問題 183
21.3 noexcept和throw() 185
21.4 預設使用noexcept的函數 186
21.5 使用noexcept的時機 189
21.6 將異常規範作為類型的一部分 190
21.7 總結 192
第 22章 類型別名和別名範本(C++11 C++14) 193
22.1 類型別名 193
22.2 別名範本 194
22.3 總結 196
第 23章 指針字面量nullptr(C++11) 197
23.1 零值整數字面量 197
23.2 nullptr關鍵字 198
23.3 總結 201
第 24章 三向比較(C++20) 202
24.1 “太空飛船”(spaceship)運算子 202
24.2 三向比較的返回類型 202
24.2.1 std::strong_ordering 203
24.2.2 std::weak_ordering 204
24.2.3 std::partial_ordering 205
24.3 對基礎類型的支持 206
24.4 自動生成的比較運算子函數 207
24.5 相容舊代碼 210
24.6 總結 211
第 25章 執行緒局部存儲(C++11) 212
25.1 作業系統和編譯器對執行緒局部存儲的支援 212
25.2 thread_local說明符 213
25.3 總結 217
第 26章 擴展的inline說明符(C++17) 218
26.1 定義非常量靜態成員變數的問題 218
26.2 使用inline說明符 219
26.3 總結 220
第 27章 常量運算式(C++11~C++20) 221
27.1 常量的不確定性 221
27.2 constexpr值 224
27.3 constexpr函數 225
27.4 constexpr構造函數 228
27.5 對浮點的支持 230
27.6 C++14標準對常量運算式函數的增強 230
27.7 constexpr lambdas運算式 233
27.8 constexpr的內聯屬性 235
27.9 if constexpr 236
27.10 允許constexpr虛函數 240
27.11 允許在constexpr函數中出現Try-catch 244
27.12 允許在constexpr中進行平凡的默認初始化 244
27.13 允許在constexpr中更改聯合類型的有效成員 245
27.14 使用consteval聲明立即函數 246
27.15 使用constinit檢查常量初始化 247
27.16 判斷常量求值環境 248
27.17 總結 252
第 28章 確定的運算式求值順序(C++17) 253
28.1 運算式求值順序的不確定性 253
28.2 運算式求值順序詳解 254
28.3 總結 255
第 29章 字面量優化(C++11~C++17) 257
29.1 十六進位浮點字面量 257
29.2 二進位整數字面量 258
29.3 單引號作為整數分隔符號 258
29.4 原生字串字面量 259
29.5 用戶自訂字面量 261
29.6 總結 267
第30章 alignas和alignof(C++11 C++17) 268
30.1 不可忽視的資料對齊問題 268
30.2 C++11標準之前控制資料對齊的方法 270
30.3 使用alignof運算子 272
30.4 使用alignas說明符 273
30.5 其他關於對齊位元組長度的支援 276
30.6 C++17中使用new分配指定對齊位元組長度的物件 278
30.7 總結 279
第31章 屬性說明符和標準屬性(C++11~C++20) 280
31.1 GCC的屬性語法 280
31.2 MSVC的屬性語法 281
31.3 標準屬性說明符語法 282
31.4 使用using打開屬性的命名空間 283
31.5 標準屬性 283
31.5.1 noreturn 284
31.5.2 carries_dependency 286
31.5.3 deprecated 286
31.5.4 fallthrough 287
31.5.5 nodiscard 288
31.5.6 maybe_unused 290
31.5.7 likely和unlikely 290
31.5.8 no_unique_address 291
31.6 總結 293
第32章 新增前置處理器和宏(C++17 C++20) 294
32.1 前置處理器__has_include 294
32.2 特性測試宏 295
32.2.1 屬性特性測試宏 295
32.2.2 語言功能特性測試宏 295
32.2.3 標準庫功能特性測試宏 297
32.3 新增宏__VA_OPT__ 301
32.4 總結 302
第33章 協程(C++20) 303
33.1 協程的使用方法 303
33.2 協程的實現原理 308
33.2.1 co_await運算子原理 308
33.2.2 co_yield運算子原理 313
33.2.3 co_return運算子原理 317
33.2.4 promise_type的其他功能 319
33.3 總結 320
第34章 基礎特性的其他優化(C++11~C++20) 321
34.1 顯式自訂類型轉換運算子(C++11) 321
34.2 關於std::launder()(C++17) 325
34.3 返回值優化(C++11~C++17) 326
34.4 允許按值進行默認比較(C++20) 333
34.5 支援new運算式推導陣列長度(C++20) 334
34.6 允許陣列轉換為未知範圍的陣列(C++20) 335
34.7 在delete運算子函數中析構物件(C++20) 336
34.8 調用偽析構函數結束物件聲明週期(C++20) 337
34.9 修復const和預設複製構造函數不匹配造成無法編譯的問題
(C++20) 338
34.10 不推薦使用volatile的情況(C++20) 339
34.11 不推薦在下標運算式中使用逗號運算子(C++20) 340
34.12 模組(C++20) 340
34.13 總結 341
第35章 可變參數範本(C++11 C++17 C++20) 342
35.1 可變參數範本的概念和語法 342
35.2 形參包展開 344
35.3 sizeof...運算子 352
35.4 可變參數範本的遞迴計算 353
35.5 折疊運算式 354
35.6 一元折疊運算式中空參數包的特殊處理 357
35.7 using聲明中的包展開 358
35.8 lambda運算式初始化捕獲的包展開 359
35.9 總結 361

第36章 typename優化(C++17 C++20) 362
36.1 允許使用typename聲明範本形參 362
36.2 減少typename使用的必要性 363
36.3 總結 365
第37章 範本參數優化(C++11 C++17 C++20) 366
37.1 允許常量求值作為所有非類型範本的實參 366
37.2 允許局部和匿名類型作為範本實參 368
37.3 允許函數範本的預設範本參數 369
37.4 函數範本添加到ADL查找規則 370
37.5 允許非類型範本形參中的字面量類類型 371
37.6 擴展的範本參數匹配規則 373
37.7 總結 374
第38章 類範本的範本實參推導(C++17 C++20) 375
38.1 通過初始化構造推導類範本的範本實參 375
38.2 拷貝初始化優先 377
38.3 lambda類型的用途 378
38.4 別名範本的類範本實參推導 380
38.5 聚合類型的類範本實參推導 380
38.6 總結 382
第39章 用戶自訂推導指引(C++17) 383
39.1 使用自訂推導指引推導範本實例 383
39.2 聚合類型類範本的推導指引 386
39.3 總結 387
第40章 SFINAE(C++11) 388
40.1 替換失敗和編譯錯誤 388
40.2 SFINAE規則詳解 389
40.3 總結 394
第41章 概念和約束(C++20) 395
41.1 使用std::enable_if約束範本 395
41.2 概念的背景介紹 396
41.3 使用concept和約束運算式定義概念 397
41.4 requires子句和約束檢查順序 398
41.5 原子約束 401
41.6 requires運算式 403
41.6.1 簡單要求 404
41.6.2 類型要求 405
41.6.3 複合要求 405
41.6.4 嵌套要求 406
41.7 約束可變參數範本 407
41.8 約束類範本特化 408
41.9 約束auto 409
41.10 總結 410
第42章 範本特性的其他優化(C++11 C++14) 411
42.1 外部範本(C++11) 411
42.2 連續右尖括號的解析優化(C++11) 413
42.3 friend聲明範本形參(C++11) 415
42.4 變數範本(C++14) 417
42.5 explicit(bool) 419
42.6 總結 423
附錄 特性章節對照表 424

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 626
無庫存,下單後進貨
(採購期約45個工作天)

暢銷榜

客服中心

收藏

會員專區