|
-- 會員 / 註冊 --
|
|
|
|
現代C++語言核心特性解析 ( 簡體 字) |
作者:謝丙? | 類別:1. -> 程式設計 -> C++ -> C++ |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 55169 詢問書籍請說出此書號!【缺書】 NT售價: 600 元 |
出版日:10/1/2021 |
頁數:427 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787115564177 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:本書是一本C++進階圖書,全書分為42章,深入探討了從C++11到C++20引入的核心特性。書中不僅通過大量的實例代碼講解特性的概念和語法,還從編譯器的角度分析特性的實現原理,書中還穿插了C++標準委員會制定特性標準時的一些小故事,幫助讀者知其然也知其所以然。 本書適合因為工作需要學習C++新特性的C++從業者,同樣也適合對C++新特性非常感興趣的C++愛好者。而對于C++初學者來說,也有必要在理解C++基礎知識后,通過本書來領略C++的另外一道風景。 |
目錄:第 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 |
序: |
|