官术网_书友最值得收藏!

本書的組織結構

本書的內容編排是理論結合實踐,涵蓋了C++11~C++20全部新增的語言核心特性,本書既能當作一本教材讓讀者可以由淺入深、由基礎特性到高級特性來掌握新增特性的原理和用法,也能作為一本“字典”讓讀者有針對性地查閱單個特性。

本書分為兩個部分,第一部分(第1~34章)是講解基礎特性,這部分內容在編程過程中會經常用到,具體如下。

第1章介紹C++11~C++20新增的基礎類型,包括新的long long整型和多個新字符類型。

第2章介紹內聯和嵌套命名空間,通過本章讀者將學到如何在外部無感知的情況下切換命名空間。

第3章探討了新特性中的重點auto占位符,探究它的推導規則,在lambda表達式中的應用,這將會是讀者在現今C++中用到最多的關鍵字。

第4章探討了decltype說明符,同樣闡述了其推導規則,并將decltype(auto)和auto做了詳細比較,有助于讀者厘清兩者的區別。

第5章介紹了函數返回類型后置特性,讀者可以通過這種函數聲明方式讓編譯器自動推導返回類型。

第6章深入探討了右值引用,該特性是所有新特性中最難理解的特性之一。本章一步一步引導讀者理解右值引用的含義和用途,并介紹其在移動語義中發揮的重要作用。另外還深入介紹了值類別,包括泛左值、純右值和將亡值。

第7章介紹了lambda表達式特性,C++11~C++20逐步遞進地討論了lambda表達式功能的增強,包括基礎語法、廣義捕獲、泛型lambda表達式以及如何在lambda表達式中使用模板語法。

第8章介紹了新的類成員的初始化方法,并且闡述了該方法與初始化列表的區別和優勢。

第9章探究了列表初始化,該特性為初始化容器類型的對象提供了方便。本章詳細描述了其工作原理并且演示了如何讓自定義容器支持列表初始化。

第10章介紹了指定默認和刪除函數的方法,讀者通過本章可以學到如何通過指定默認函數強制編譯器生成函數,以及刪除特定函數讓編譯器無法自動生成。

第11章介紹非受限聯合類型,該特性可以解決聯合類型在C++中缺乏實用性的問題,通過非受限聯合類型可以在聯合類型中聲明非平凡類型成員。

第12章和第13章介紹了委托構造函數和繼承構造函數,它們都是為了解決C++類中構造函數代碼冗余的問題。

第14章探究了強枚舉類型,強枚舉類型解決了普通枚舉類型中幾個一直被詬病的問題,包括類型檢查不嚴格、底層類型定義不清晰等。

第15章詳細探討了擴展的聚合類型,闡明聚合類型的新定義,指出該新定義下過去代碼中可能出現的問題。

第16章介紹了override和final說明符,說明了重寫、重載和隱藏的區別,讀者可以通過這兩個說明符將虛函數重寫的語法檢查工作交給編譯器。

第17章深入探討了基于范圍的for循環,該特性能簡化枚舉容器中元素的代碼,除了描述該特性的使用方法,本章還說明了for循環的實現原理,并且實現了一個支持基于范圍的for循環容器例子。

第18章介紹了支持初始化語句的if和switch,使用該特性可以將變量的初始化以及條件判斷統一到相同的作用域。

第19章介紹了static_assert關鍵字,讀者可以通過本章了解如何通過static_assert讓代碼在編譯階段就找到錯誤。

第20章深入探討了結構化綁定的使用方式、規則和原理,通過本章,讀者將學會如何讓C++像Python一樣返回多個值,如何讓一個第三方類型支持結構化綁定語法。

第21章介紹了noexcept關鍵字,描述了noexcept相對于throw()的優勢,并且探討了noexcept在作為運算符時如何為移動構造函數提供異常控制的支持。

第22章討論了類型別名和別名模板,讀者通過本章將學會通過using關鍵字定義類型別名,并且掌握別名模板為后續模板的相關特性打下基礎。

第23章介紹了指針字面量nullptr,討論了nullptr對比0作為空指針常量的優勢。

第24章探究了三向比較特性,闡述了三向比較運算符的語法,返回類型特征以及自動生成其他比較運算符的規則。

第25章介紹了線程局部存儲,讀者可以從本章了解到編譯器和操作系統支持線程局部存儲的方法,以及線程局部存儲解決了哪些問題。

第26章介紹了擴展的inline說明符特性,該特性解決了類的非常量靜態成員變量聲明必須和定義分開的問題。

第27章深入探究了常量表達式。本章有一定難度,不僅介紹了使用constexpr定義常量表達式函數、構造函數,并且分不同時期的標準探討了使常量表達式成立的規則的變化,另外還討論了constexpr在if控制結構、lambda表達式和虛函數中的應用。

第28章討論了表達式求值順序的問題,新特性解決了C++17之前C++標準沒有對表達式求值順序做嚴格規定的問題。

第29章討論了新標準對字面量的優化,其中集中描述了新標準對二進制整數、十六進制浮點、原生字符串字面量的支持,另外還詳細介紹了如何實現自定義字面量。

第30章深入探討了alignas和alignof關鍵字。本章從CPU的角度出發討論了數據對齊對于程序運行效率的重要性,進而說明如何使用新標準提供的方式完成數據對齊,最后用實例證明了數據對齊對性能的影響。

第31章介紹了屬性說明符和標準屬性,通過本章讀者將學會使用屬性的方法,了解指定屬性的規則,并且能充分理解C++11到C++20中的9個標準屬性。

第32章介紹了新增預處理器和宏。本章展示了使用__has_include預處理器判斷是否包含頭文件的方法,并且介紹了一系列的特性測試宏,使用它們可以判斷編譯器對某個特性的支持程度。

第33章深入探討了協程的使用方法和原理,從如何簡單地借助標準庫使用協程入手,分別詮釋了co_await、co_yield和co_return運算符原理,并且展示了如何自定義一個支持協程的類型。

第34章是一些其他基礎特性的優化,雖然這些特性比較簡短不成體系但是卻也相當重要,比如返回值優化,允許數組轉換為未知范圍的數組等。

從第35章開始進入本書的第二部分,第二部分主要探討的是模板相關的新特性,具體如下。

第35章深入討論了可變參數模板。本章中除了介紹可變參數模板的基本語法,還深入討論了形參包展開的各種場景,展示了使用可變參數模板進行模板元編程的方法,最后探討了C++17中折疊表達式的語法和規則。

第36章介紹了新標準對typename的優化,新標準明確指明了可以省略typename的場景,并且讓模板參數支持使用typename。

第37章集中介紹了新標準對模板參數的改進,包括允許局部和匿名類型作為模板實參、將函數模板添加到ADL查找規則中等。

第38章討論了新標準模板推導的優化,在C++17標準之前實例化類模板必須顯式指定模板實參,但是現在不需要了。本章介紹了使用構造函數推導類模板實參的方法以及它在各種場景下的應用。

第39章介紹了用戶定義推導指引,讀者通過本章將學到如何通過自定義推導指引來控制編譯器推導模板實例路徑。

第40章討論了SFINAE規則,通過SFINAE規則開發人員能夠控制編譯器選擇模板實例化的方法,SFINAE規則也是模板元編程必不可少的組成部分。

第41章深入探討了概念和約束,通過這部分內容讀者可以體會到對編譯器前所未有的掌控力,概念可以通過各方面約束編譯器對模板的實例化。本章詳細討論了concept和requires的語法和使用規則,并且展示了其在可變參數模板和auto中的約束作用。

第42章介紹了模板特性的其他優化,包括新增的變量模板以及使用friend聲明模板形參的優化等。

主站蜘蛛池模板: 邻水| 随州市| 溧阳市| 三门峡市| 西乌珠穆沁旗| 玉溪市| 安塞县| 绥化市| 宿迁市| 浙江省| 仙居县| 梁山县| 确山县| 海盐县| 南通市| 苏尼特右旗| 缙云县| 华阴市| 阿克| 河西区| 甘洛县| 尚志市| 库尔勒市| 油尖旺区| 定边县| 三门县| 陵水| 宁都县| 临漳县| 沾化县| 扎兰屯市| 岳阳市| 大荔县| 呼和浩特市| 石棉县| 曲沃县| 电白县| 木里| 抚远县| 武威市| 金山区|