C++20高級編程主要講解C++庫、框架開發(fā)中的高級編程技術(shù),以及*新的C++20標(biāo)準(zhǔn)特性。全書共10章,分別為:類型與對象、編譯時多態(tài)、概念約束、元編程介紹、模板元編程、constexpr元編程、Ranges標(biāo)準(zhǔn)庫、協(xié)程、模塊、綜合運用。其中C++20的四大特性獨立成章,一些小的特性則貫穿于全書,其他章節(jié)則探討了面向?qū)ο、元編程、函?shù)式編程、并發(fā)編程等話題。
C++20高級編程針對以上新特性準(zhǔn)備了豐富的代碼樣例,并隨書附贈全部案例源碼。相信通過這些代碼,讀者很容易掌握這些新特性。作為一本講解C++高級編程的書,本書還探討了很多元編程話題,這是作為庫開發(fā)必不可少的技能,它們也將隨著C++的演進(jìn)而不斷演進(jìn),大大提升庫開發(fā)者的編程體驗,尤其是近年來C++的標(biāo)準(zhǔn)提案經(jīng)歷了從模板元編程向constexpr元編程轉(zhuǎn)換的過程。
C++20高級編程適合中高級C++程序員、架構(gòu)師、框架開發(fā)者閱讀,閱讀前*好能夠掌握一些現(xiàn)代C++的知識。對于想要系統(tǒng)性學(xué)習(xí)C++20并進(jìn)階C++技能的讀者,一定不要錯過本書。
序
前言
第1章 類型與對象/
1.1類型的作用/
1.2現(xiàn)代C++中對類型處理能力的演進(jìn)/
1.3值類別(value category)/
1.3.1理解左值與右值/
1.3.2函數(shù)形參何時使用何種引用/
1.3.3轉(zhuǎn)發(fā)引用與完美轉(zhuǎn)發(fā)/
1.4類型推導(dǎo)/
1.4.1auto類型推導(dǎo)/
1.4.2decltype類型推導(dǎo)/
1.4.3decltype(auto)類型推導(dǎo)/
1.4.4std::declval元函數(shù)/
1.4.5類模板參數(shù)推導(dǎo)(CTAD)/
1.5函數(shù)對象/
1.5.1定義函數(shù)對象/
1.5.2lambda表達(dá)式/
1.5.3函數(shù)適配器/
1.6運行時多態(tài)/
1.6.1運行時多態(tài)手段/
1.6.2subtype多態(tài)vsadhoc多態(tài)/
1.7調(diào)試手段/
1.7.1編譯時打印方案/
1.7.2運行時打印方案/
1.7.3使用外部工具/
第2章 編譯時多態(tài)/
2.1函數(shù)重載機(jī)制/
2.1.1名稱查找/
2.1.2模板函數(shù)處理/
2.1.3重載決議/
2.1.4注意事項/
2.1.5再談SFINAE/
2.2類型特征(Type traits)/
2.2.1Type traits謂詞與變量模板/
2.2.2類型變換/
2.2.3輔助類/
2.2.4空基類優(yōu)化/
2.2.5實現(xiàn)Type traits/
2.2.6類型內(nèi)省/
2.2.7enable_if元函數(shù)/
2.2.8標(biāo)簽分發(fā)/
2.2.9if constexpr/
2.2.10void_t元函數(shù)/
2.3奇異遞歸模板/
2.3.1代碼復(fù)用/
2.3.2靜態(tài)多態(tài)/
2.3.3enable_shared_from_this模板類/
2.4表達(dá)式模板/
2.4.1標(biāo)量延遲計算/
2.4.2向量延遲計算/
2.4.3提高表達(dá)力/
2.5注意事項/
第3章 概念約束/
3.1定義概念/
3.2requires表達(dá)式/
3.2.1簡單要求/
3.2.2類型要求/
3.2.3復(fù)合要求/
3.2.4嵌套要求/
3.2.5注意事項/
3.3requires子句/
3.4約束的偏序規(guī)則/
3.4.1約束表達(dá)式歸一化/
3.4.2簡單約束的包含關(guān)系/
3.4.3一般約束的包含關(guān)系/
3.4.4using類型別名與concept表達(dá)式別名/
3.5概念標(biāo)準(zhǔn)庫/
3.5.1same_as(與某類相同)/
3.5.2derived_from(派生自某類)/
3.5.3convertible_to(可轉(zhuǎn)換為某類)/
3.5.4算術(shù)概念/
3.5.5值概念/
3.5.6invocable(可調(diào)用的)/
3.6綜合運用之?dāng)U展transform變換算法/
3.7注意事項/
第4章 元編程介紹/
4.1元編程歷史/
4.2模板歷史/
4.3constexpr歷史/
4.4元編程能力與應(yīng)用/
4.4.1零成本抽象/
4.4.2值計算/
4.4.3類型計算/
4.4.4編譯時多態(tài)/
4.4.5類型安全/
4.4.6泛型編程/
4.4.7靜態(tài)反射/
4.4.8內(nèi)部領(lǐng)域特定語言EDSL/
第5章 模板元編程/
5.1模板vs宏/
5.1.1泛型函數(shù)/
5.1.2泛型容器/
5.2模板類元函數(shù)/
5.2.1數(shù)值計算/
5.2.2類型計算/
5.3TypeList/
5.3.1基本方法/
5.3.2高階函數(shù)/
5.3.3常用算法/
5.4綜合運用/
5.4.1全局最短路徑/
5.4.2KV數(shù)據(jù)表/
5.4.3注意事項/
第6章 constexpr元編程/
6.1constexpr變量/
6.2constinit初始化/
6.3折疊表達(dá)式/
6.4constexpr函數(shù)/
6.4.1consteval/
6.4.2編譯時內(nèi)存分配/
6.4.3編譯時虛函數(shù)/
6.4.4is_constant_evaluated/
6.4.5停機(jī)問題/
6.4.6檢測未定義行為/
6.5非類型模板參數(shù)/
6.6constexpr與TypeList/
6.6.1類型、值的包裹類/
6.6.2高階函數(shù)/
6.6.3管道操作符/
6.6.4重構(gòu)KV數(shù)據(jù)表/
6.7綜合運用之編譯時字符串操作/
第7章 Ranges標(biāo)準(zhǔn)庫/
7.1range訪問操作/
7.1.1ranges::begin/
7.1.2ranges::end/
7.1.3ranges::size/
7.1.4ranges::empty/
7.1.5ranges::data/
7.2range相關(guān)概念/
7.2.1range/
7.2.2borrowed_range/
7.2.3sized_range/
7.2.4view/
7.2.5其他概念/
7.3range實用組件/
7.3.1view_interface/
7.3.2subrange/
7.3.3ref_view/
7.4range工廠/
7.4.1empty_view/
7.4.2single_view/
7.4.3iota_view/
7.4.4istream_view/
7.5range適配器/
7.5.1適配器對象/
7.5.2all/
7.5.3filter/
7.5.4transform/
7.5.5take/
7.5.6take_while/
7.5.7drop/
7.5.8drop_while/
7.5.9join/
7.5.10split/
7.5.11common/
7.5.12reverse/
7.5.13elements/
7.6其他改善/
7.6.1迭代器概念/
7.6.2算法接口改善/
7.7綜合運用/
7.7.1矩陣乘法/
7.7.2日歷程序/
7.7.3注意事項/
第8章 協(xié)程/
8.1協(xié)程的起源/
8.2協(xié)程初探/
8.3函數(shù)與協(xié)程理論/
8.4揭秘co_await表達(dá)式/
8.4.1表達(dá)式轉(zhuǎn)換過程/
8.4.2Awaiter對象/
8.4.3標(biāo)準(zhǔn)庫中的Awaiter/
8.5揭秘Promise概念/
8.5.1協(xié)程句柄/
8.5.2Promise概念/
8.6綜合運用/
8.6.1生成器/
8.6.2為已有類型非侵入式擴(kuò)展協(xié)程接口/
8.6.3利用協(xié)程機(jī)制簡化錯誤處理/
8.6.4注意事項/
第9章 模塊/
9.1Hello World模塊/
9.2定義一個模塊/
9.3模塊分區(qū)/
9.4私有片段/
9.5模塊樣板文件/
9.6注意事項/
第10章 綜合運用/
10.1配置文件反序列化框架/
10.1.1背景介紹/
10.1.2標(biāo)準(zhǔn)的缺失,靜態(tài)反射機(jī)制/
10.1.3元數(shù)據(jù)設(shè)計/
10.1.4REPEAT宏/
10.1.5結(jié)構(gòu)體遍歷/
10.1.6編譯時多態(tài)/
10.1.7反序列化數(shù)據(jù)類型/
10.2AsyncIO協(xié)程庫/
10.2.1背景介紹/
10.2.2性能測試/
10.2.3事件驅(qū)動模型/
10.2.4Handle類設(shè)計/
10.2.5調(diào)度器設(shè)計/
10.2.6Task協(xié)程設(shè)計/
10.2.7實現(xiàn)一些協(xié)程/
10.2.8注意事項/
附錄/
附錄A概念約束歷史/
參考文獻(xiàn)/