C++ Templates 第2版 英文版

C++ Templates 第2版 英文版 pdf epub mobi txt 電子書 下載 2025

[美] 戴維·範德沃德(David Vandevoorde),[德] 尼古拉·約祖蒂斯(Nicolai M.Josuttis),[美] 道格拉斯·格雷戈(Douglas Gregor) 著,sy 譯
圖書標籤:
  • C++
  • Templates
  • Generic
  • Programming
  • STL
  • Metaprogramming
  • Templates
  • Second
  • Edition
  • Programming
  • Language
  • Computer
  • Science
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 人民郵電齣版社
ISBN:9787115479938
版次:1
商品編碼:12349529
品牌:異步圖書
包裝:平裝
開本:16開
齣版時間:2018-05-01
用紙:膠版紙
頁數:788
正文語種:英文版

具體描述

編輯推薦

C++領域經典圖書時隔15年之後的全新升級
針對C++11、C++14和C++17標準進行瞭全麵更新
C++軟件工程師完全參考指南
C++模闆知識的解釋
C++標準參考讀物
primer之後的模闆技術研究**
使用C++模闆的常用設計技巧
應用例證

內容簡介

本書是同名經典暢銷圖書的全新升級版本,針對C++11、C++14、C++17標準進行瞭全麵更新,並對所有的新語言特性(包括可變參數模闆、通用lambda、類模闆參數推導等)進行瞭解釋。
全書共28章。首先全麵介紹瞭本書的內容結構和相關情況。第1部分(第1~11章)介紹瞭模闆的基本概念,第2部分(第12~17章)深入闡述瞭模闆的細節,第3部分(第18~28章)介紹瞭C++模闆所支持的基本設計技術。附錄A、附錄B、附錄C、附錄D和附錄E分彆為一處定義原則、值類彆、重載解析、標準類型實用程序和概念的相關資料。
本書適閤對C++模闆技術感興趣的有一定經驗的程序員閱讀。

作者簡介

David Vandevoorde,Edison Design Group公司的工程副總裁,為公司的C++編譯器中的一些關 鍵特性進行瞭架構設計。他是知名的comp.lang.c++.moderat論壇的聯閤創始人,同時還積極投身於C++ 的標準化工作。他擁有倫斯勒理工學院計算機科學博士、碩士學位,以及布魯塞爾自由大學的工程碩 士學位。
Nicolai M. Josuttis,他是一位獨立的係統架構師、技術經理、顧問以及培訓師,過去20年以來 他一直緻力於C++的標準化工作。他還是The C++ Standard Library: A Tutorial and Reference (2nd Edition) 等書的作者。
Douglas Gregor,是一位知名的編譯器人員,具有C++庫的設計背景。作為Boost的早期貢獻 者,他開發的一些庫被列入瞭C++標準。在對C++11提供支持的期間,他領導瞭開源的C++編譯器 Clang的實現。他擁有倫斯勒理工學院的計算機科學博士學位。

目錄

第 1部分: 基本概念

1 Function Templates 第 1章 函數模闆

1.1 A First Look at Function Templates/初識函數模闆
1.1.1 Defining the Template/定義模闆
1.1.2 Using the Template/使用模闆
1.1.3 Two-Phase Translation/二階段翻譯
1.2 Template Argument Deduction/模闆參數推導
1.3 Multiple Template Parameters/多模闆參數
1.3.1 Template Parameters for Return Types/返迴類型的模闆參數
1.3.2 Deducing the Return Type/推導返迴類型
1.3.3 Return Type as CommonType/作為通用類型返迴
1.4 Default Template Arguments/缺省模闆參數
1.5 Overloading Function Templates/重載函數模闆
1.6 But,Shouldn’t We... /但是,難道我們不應該…?
1.6.1 Pass by Value or by Reference /按值傳遞還是按引用傳遞?
1.6.2 Why Not inline 為什麼不用inline呢?
1.6.3 Why Not constexpr 為什麼不用constexpr呢?
1.7 Summary/小結

2 Class Template 第 2章 類模闆

2.1 Implementation of Class Template Stack/類模闆Stack的實現
2.1.1 Declaration of Class Templates/類模闆聲明
2.1.2 Implementation of Member Functions/成員函數的實現
2.2 Use of Class Template Stack/類模闆Stack的使用
2.3 Partial Usage of Class Templates/類模闆的局部使用
2.3.1 Concepts/概念
2.4 Friends/友元
2.5 Specializations of Class Templates/類模闆特化
2.6 Partial Specialization/偏特化
2.7 Default Class Template Arguments/缺省類模闆參數
2.8 Type Aliases/類型彆名
2.9 Class Template Argument Deduction/類模闆參數推導
2.10 Templatized Aggregates/模闆聚閤
2.11 Summary/小結

3 Nontype Template Parameters 第3章 非類型模闆參數

3.1 Nontype Class Template Parameters/非類型類模闆參數
3.2 Nontype Function Template Parameters/非類型函數模闆參數
3.3 Restrictions for Nontype Template Parameters/非類型模闆參數的限製
3.4 Template Parameter Type auto/模闆參數類型auto
3.5 Summary/小結

4 Variadic Templates第4章 可變參數模闆

4.1 Variadic Templates/可變參數模闆
4.1.1 Variadic Templates by Example/可變參數模闆實例
4.1.2 Overloading Variadic and Nonvariadic Templates/重載可變參數和非可變參數模闆
4.1.3 Operator sizeof/運算符sizeof
4.2 Fold Expressions/摺疊錶達式
4.3 Application of Variadic Templates /可變參數模闆的應用
4.4 Variadic Class Templates and Variadic Expressions/可變參數類模闆和可變參數錶達式
4.4.1 Variadic Expressions/可變參數錶達式
4.4.2 Variadic Indices/可變參數指數
4.4.3 Variadic Class Templates/可變參數類模闆
4.4.4 Variadic Deduction Guides/可變參數推導指南
4.4.5 Variadic Base Classes and using/可變參數基類和using
4.5 Summary/小結
5 Tricky Basics 第5章 基礎技術

5.1 Keyword typename/關鍵字typename
5.2 Zero Initialization/零初始化
5.3 Using this->/ this->的使用
5.4 Templates for Raw Arrays and String Literals/原始數組和字符串字麵量模闆
5.5 Member Templates/成員模闆
5.5.1 The .template Construct/構造.template
5.5.2 Generic Lambdas and Member Templates/泛型Lambda與成員模闆
5.6 Variable Templates/變量模闆
5.7 Template Template Parameters/模闆的模闆參數
5.8 Summary/小結

6 Move Semantics and enable_if<> 第6章 移動語義與enable_if<>

6.1 Perfect Forwarding/完美轉發
6.2 Special Member Function Templates/特殊的成員函數模闆
6.3 Disable Templates with enable_if<>/使用enable_if <>禁用模闆
6.4 Using enable_if<>/使用enable_if<>
6.5 Using Concepts to Simplify enable_if<> Expressions/ 使用概念簡化enable_if<>錶達式
6.6 Summary/小結

7 By Value or by Reference 第7章 按值傳遞還是按引用傳遞?

7.1 Passing by Value/按值傳遞
7.2 Passing by Reference/按引用傳遞
7.2.1 Passing by Constant Reference/按常量引用調傳遞
7.2.2 Passing by Nonconstant Reference/按非常量引用傳遞
7.2.3 Passing by Forwarding Reference/按轉發傳遞
7.3 Using std::ref()andstd::cref()/std::ref() 和std::cref()的使用
7.4 Dealing with String Literals and Raw Arrays/ 處理字符串字麵量常量與原始數組
7.4.1 Special Implementations for String Literals and Raw Arrays/ 字符串字麵量常量和原始數組的特殊實現
7.5 Dealing with Return Values/處理返迴值
7.6 Recommended Template Parameter Declarations/模闆參數聲明推薦
7.7 Summary/小結

8 Compile-Time Programming 第8章 編譯時編程

8.1 Template Meta programming/模闆元編程
8.2 Computing with constexpr/使用constexpr計算
8.3 Execution Path Selection with Partial Specialization/局部特化的執行路徑選擇
8.4 SFINAE(Substitution Failure Is Not An Error)/ SFINAE(替換失敗並不是一種錯誤)
8.4.1 Expression SFINAE with decltype/ 帶有decltype 的SFINAE錶達式
8.5 Compile-Time if/編譯時if
8.6 Summary/小結

9 Using Templates in Practice 第9章 在實戰中使用模闆

9.1 The Inclusion Model/包含模型
9.1.1 Linker Errors/鏈接器錯誤
9.1.2 Templates in Header Files/頭文件中的模闆
9.2 Templates and inline/模闆和內聯
9.3 Precompiled Headers/預編譯頭文件
9.4 Decoding the Error Novel/破譯大篇幅錯誤信息
9.5 Afternotes/本章後記
9.6 Summary/小結

10 Basic Template Terminology 第 10章 基本模闆術語

10.1“Class Template” or “Template Class” / “類模闆”還是“模闆類”
10.2 Substitution , Instantiation , and Specialization/替換、實例化和特化
10.3 Declarations versus Definitions/聲明和定義
10.3.1 Complete versus Incomplete Types/完全和不完全類型
10.4 The One-Definition Rule/一處定義規則
10.5 Template Arguments versus Template Parameters/模闆實數和模闆形參
10.6 Summary/小結

11 Generic Libraries 第 11章 泛型庫

11.1 Callables/ Callable
11.1.1 Supporting Function Objects/支持函數對象
11.1.2 Dealing with Member Functions and Additional Arguments/處理成員函數和附加實參
11 .1.3 Wrapping Function Calls/包裝函數調用
11.2 Other Utilities to Implement Generic Libraries/實現泛型庫的其他實用程序
11.2.1 Type Traits/ Type Traits
11.2.2 std::addressof()/std::addressof()
11.2.3 std::declval()/std::declval()
11.3 Perfect Forwarding Temporaries/完美轉發臨時對象
11.4 References as Template Parameters/引用為模闆參數
11.5 Defer Evaluations/延遲評估
11.6 Things to Consider When Writing Generic Libraries/編寫泛型庫時需要考慮的事情
11.7 Summary/小結

PartII: Templates in Depth 第二部分 深入模闆

12 Fundamentals in Depth深入模闆基礎

12.1 Parameterized Declarations/參數化宣告
12.1.1 Virtual Member Functions/虛成員函數
12.1.2 Linkage of Templates/模闆鏈接
12.1.3 Primary Templates/主模闆
12.2 Template Parameters/模闆形參
12.2.1 Type Parameters/類型形參
12.2.2 Nontype Parameters/非類型形參
12.2.3 Template Template Parameters/模闆的模闆形參
12.2.4 Template Parameter Packs/模闆參數包
12.2.5 Default Template Arguments/缺省模闆實參
12.3 Template Arguments/模闆實參
12.3.1 Function Template Arguments/函數模闆實參
12.3.2 Type Arguments/類型實參
12.3.3 Nontype Arguments/非類型實參
12.3.4 Template Template Arguments/模闆的模闆實參
12.3.5 Equivalence/實參的等價性
12.4 Variadic Templates/可變參數模闆
12.4.1 Pack Expansions/包擴展
12.4.2 Where Can Pack Expansions Occur /在哪裏進行包擴展?
12.4.3 Function Parameter Packs/函數的參數包
12.4.4 Multiple and Nested Pack Expansions/多重和嵌套包擴展
12.4.5 Zero-Length Pack Expansions/零長度包擴展
12.4.6 Fold Expressions/摺疊錶達式
12.5 Friends/友元
12.5.1 Friend Classes of Class Templates/類模闆的友元類
12.5.2 Friend Functions of Class Templates /類模闆的友元函數
12.5.3 Friend Templates/友元模闆
12.6 Afternotes/本章後記

13 Names in Templates 第 13章 模闆中的名稱

13.1 Name Taxonomy/名稱的分類
13.2 Looking Up Names/名稱的查找
13.2.1 Argument-Dependent Lookup/參數依賴查找 (ADL)
13.2.2 Argument-Dependent Lookup of Friend Declarations/友元聲明的ADL
13.2.3 Injected Class Names/注入式類名稱
13.2.4 Current Instantiations/當前實例化
13.3 Parsing Templates/解析模闆
13.3.1 Context Sensitivity in Nontemplates/非模闆的上下文敏感性
13.3.2 Dependent Names of Types/類型的依賴名稱
13.3.3 Dependent Names of Templates/模闆的依賴名稱
13.3.4 Dependent Names in Using Declarations/使用聲明中的依賴名稱
13.3.5 ADL and Explicit Template Arguments/ADL和顯式模闆實參
13.3.6 Dependent Expressions/依賴錶達式
13.3.7 Compiler Errors/編譯器錯誤
13.4 Inheritance and Class Templates/繼承和類模闆
13.4.1 Nondependent Base Classes/非依賴型基類
13.4.2 Dependent Base Classes/依賴型基類
13.5 Afternotes/本章後記

14 Instantiation 第 14章 實例化

14.1 On-Demand Instantiation/ 按需實例化
14.2 Lazy Instantiation/延遲實例化
14.2.1 Partial and Full Instantiation/部分和全部實例化
14.2.2 Instantiated Components/實例化組件
14.3 The C++ Instantiation Model/C++實例化模型
14.3.1 Two-Phase Lookup/二階段查找
14.3.2 Points of Instantiation/實例化點
14.3.3 The Inclusion Model/包含模型
14.4 Implementation Schemes/實現方案
14.4.1 Greedy Instantiation/貪婪實例化
14.4.2 Queried Instantiation/詢問實例化
14.4.3 Iterated Instantiation/迭代實例化
14.5 Explicit Instantiation/顯式實例化
14.5.1 Manual Instantiation/手動實例化
14.5.2 Explicit Instantiation Declarations/顯式實例化聲明
14.6 Compile-Time if Statements/ 編譯時if語句
14.7 In the Standard Library/標準庫
14.8 Afternotes/本章後記

15 Template Argument Deduction 第 15章 模闆實參推導

15.1 The Deduction Process/推導過程
15.2 Deduced Contexts/推導上下文
15.3 Special Deduction Situations/特殊的推導情況
15.4 Initializer Lists/初始化列錶
15.5 Parameter Packs/形參包
15.5.1 Literal Operator Templates/字麵運算符模闆
15.6 Rvalue References/右值引用
15.6.1 Reference Collapsing Rules/引用摺疊原則
15.6.2 Forwarding References/轉發引用
15.6.3 Perfect Forwarding/完美轉發
15.6.4 Deduction Surprises/推導的驚喜
15.7 SFINAE(Substitution Failure Is Not An Error )/ 替換失敗並不是錯誤
15.7.1 Immediate Context/即時上下文
15.8 Limitations of Deduction/推導的限製
15.8.1 Allowable Argument Conversions/可接受的實參轉換
15.8.2 Class Template Arguments/類模闆實參
15.8.3 Default Call Arguments/缺省調用實參
15.8.4 Exception Specifications/異常規範
15.9 Explicit Function Template Arguments/顯式函數模闆實參
15.10 Deduction from Initializers and Expressions/從初始化和錶達式中推導
15.10.1 The auto Type Specifier/ auto類型說明符
15.10.2 Expressing the Type of an Expression with decltype/用 decltype錶示錶達式的類型
15.10.3 decltype(auto)/ decltype(auto)
15.10.4 Special Situations for auto Deduction/ auto推導的特殊情況
15.10.5 Structured Bindings/結構化綁定
15.10.6 Generic Lambdas/ 泛型Lambda錶達式
15.11 Alias Templates/彆名模闆
15.12 Class Template Argument Deduction/類模闆實參推導
15.12.1 Deduction Guides/ 推導指南
15.12.2 Implicit Deduction Guides/隱式推導指南
15.12.3 Other Subtleties/其他細節
15.13 Afternotes/本章後記

16 Specialization and Overloading 特化和重載

16.1 When“Generic Code” Doesn’t Quite Cut It/當“泛型代碼”並不能很好地解決問題時
16.1.1 Transparent Customization/ 透明自定義
16.1.2 Semantic Transparency/語義透明度
16.2 Overloading Function Templates/重載函數模闆
16.2.1 Signatures/簽名
16.2.2 Partial Ordering of Overloaded Function Templates/重載函數模闆的偏序
16.2.3 Formal Ordering Rules/正式的排序規則
16.2.4 Templates and Nontemplates/模闆和非模闆
16.2.5 Variadic Function Templates/可變參數函數模闆
16.3 Explicit Specialization/顯式特化
16.3.1 Full Class Template Specialization/全局類模闆特化
16.3.2 Full Function Template Specialization/全局函數模闆特化
16.3.3 Full Variable Template Specialization/全局可變模闆特化
16.3.4 Full Member Specialization/全局成員特化..
16.4 Partial Class Template Specialization/局部類模闆特化
16.5 Partial Variable Template Specialization/局部可變模闆特化
16.6 Afternotes/本章後記

17 Future Directions 第 17章 未來發展方嚮

17.1 Relaxed typename Rules/寬鬆的typename原則
17.2 Generalized Nontype Template Parameters/廣義非類型模闆參數
17.3 Partial Specialization of Function Templates/函數模闆的局部特化
17.4 Named Template Arguments/命名模闆實參
17.5 Overloaded Class Templates/重載類模闆
17.6 Deduction for Nonfinal Pack Expansions/中間包擴展的推導
17.7 Regularization of void/void的規範化
17.8 Type Checking for Templates/模闆的類型檢查
17.9 Reflective Meta programming/反射元編程
17.10 Pack Facilities/包管理工具
17.11 Modules/模塊

PartIII: Templates and Design 第3部分 模闆和設計

18 The Polymorphic Power of Templates 第 18章 模闆的多態性

18.1 Dynamic Polymorphism/動態多態性
18.2 Static Polymorphism/靜態多態性
18.3 Dynamic versus Static Polymorphism/動態多態性與靜態多態性
18.4 Using Concepts/概念
18.5 New Forms of Design Patterns/設計模式的新形式
18.6 Generic Programming/泛型編程
18.7 Afternotes/本章後記

19 Implementing Traits 第 19章Trait的實現
19.1 An Example : Accumulating a Sequence/一個實例:纍加一個序列
19.1.1 Fixed Traits/Fixed Trait
19.1.2 Value Traits/Value Trait
19.1.3 Parameterized Traits/參數化Trait
19.2 Traits versus Policies and Policy Classes/ Traits、Policy和Policy類
19.2.1 Traits and Policies : What’s the Difference / Traits和 Policy:區彆在哪裏?
19.2.2MemberTemplatesversusTemplate Template Parameters/成員模闆與模闆的模闆參數
19.2.3Combining Multiple Policies and/or Traits/組閤多個policy和/或trait
19.2.4 Accumulation with General Iterators/用一般迭代器纍積
19.3 Type Functions/類型函數
19.3.1 Element Types/元素類型
19.3.2 Transformation Traits/ Transformation Traits
19.3.3 Predicate Traits/ Predicate Traits
19.3.4 Result Type Traits/ Result Type Traits
19.4 SFINAE-Based Traits/ 基於SFINAE的Trait
19.4.1 SFINAE Out Function Overloads/ SFINAE功能過載
19.4.2 SFINAE Out Partial Specializations/ SFINAE局部特化
19.4.3 Using Generic Lambdas for SFINAE/為SFINAE使用泛型Lambda錶達式
19.4.4 SFINAE-Friendly Traits/ SFINAE友好的特徵
19.5 IsConvertibleT/IsConvertibleT
19.6 Detecting Members/檢查成員
19.6.1 Detecting Member Types/檢查成員類型
19.6.2 Detecting Arbitrary Member Types/檢查任意成員類型
19.6.3 Detecting Nontype Members/檢查非類型成員
19.6.4 Using Generic Lambdas to Detect Members/使用泛型Lambda錶達式檢查成員
19.7 Other Traits Techniques/其他Trait技術
19.7.1 If-Then-Else/ If-Then-Else
19.7.2 Detecting Nonthrowing Operations/檢查不拋齣異常的操作
19.7.3 Traits Convenience/ Trait的便利性
19.8 Type Classification/類型分類
19.8.1 Determining Fundamental Types/確定基本類型
19.8.2 Determining Compound Types/確定復閤類型
19.8.3 Identifying Function Types/識彆函數類型
19.8.4 Determining Class Types/確定類類型
19.8.5 Determining Enumeration Types/確定枚舉類型
19.9 Policy Traits/ Policy Trait
19.9.1 Read-Only Parameter Types/ 隻讀參數類型
19.10 In the Standard Library/在標準庫中
19.11 Afternotes/本章後記

20 Overloading on Type Properties 第 20章 類型屬性上的重載

20.1 Algorithm Specialization/算法特化
20.2 Tag Dispatching/標簽調度
20.3 Enabling/Disabling Function Templates/啓用/禁用函數模闆
20.3.1 Providing Multiple Specializations/提供多重特化
20.3.2 Where Does the EnableIf Go / EnableIf在哪裏運行?
20.3.3 Compile-Time if/編譯時if
20.3.4 Concepts/概念
20.4 Class Specialization/類的特化
20.4.1 Enabling/Disabling Class Templates/啓用/禁用類模闆
20.4.2 Tag Dispatching for Class Templates/類模闆標簽調度
20.5 Instantiation-Safe Templates/ 實例化安全的模闆
20.6 In the Standard Library/在標準庫中
20.7 Afternotes/本章後記

21 Templates and Inheritance 第 21章 模闆和繼承

21.1 The Empty Base Class Optimization(EBCO)/ 空白基類最優化
21.1.1 Layout Principles/布局原則
21.1.2 Members as Base Classes/成員作為基類
21.2 The Curiously Recurring Template Pattern(CRTP)/ 奇異遞歸模闆模式
21.2.1 The Barton-Nackman Trick/ Barton-Nackman技巧
21.2.2 Operator Implementations/操作符實現
21.2.3 Facades/ 門麵模式
21.3 Mixins/ Mixin
21.3.1 Curious Mixins/ 令人好奇的Mixin
21.3.2 Parameterized Virtuality參數化的虛擬性
21.4 Named Template Arguments/指定模闆參數
21.5 Afternotes/本章後記

22 Bridging Static and Dynamic Polymorphism 第 22章 橋接靜態和動態多態性

22.1 Function Objects , Pointers , and std::function<>/函數對象、指針和std::function<>
22.2 Generalized Function Pointers/廣義函數指針
22.3 Bridge Interface/橋接口
22.4 Type Erasure/類型擦除
22.5 Optional Bridging/可選橋接
22.6 Performance Considerations/性能考慮
22.7 Afternotes/本章後記

23 Meta programming 第 23章 元編程

23.1 The State of Modern C++ Meta programming/現代C++元編程的狀態
23.1.1 Value Meta programming
23.1.2 Type Meta programming/類型元編
23.1.3 Hybrid Meta programming/混閤元編程
23.1.4 Hybrid Meta programming for Unit Types/單元類型的混閤元編程
23.2 The Dimensions of Reflective Meta programming/反射元編程的維數
23.3 The Cost of Recursive Instantiation/遞歸實例化的代價
23.3.1 Tracking All Instantiations/跟蹤所有實例
23.4 Computational Completeness/計算完整性
23.5 Recursive Instantiation versus Recursive Template Arguments/遞歸實例化與遞歸模闆參數
23.6Enumeration Values versus Static Constants/枚舉值與靜態常量
23.7 Afternotes/本章後記

24 Typelists 第 24章Typelist

24.1 Anatomy of a Typelist/ Typelist解析
24.2 Typelist Algorithms/ Typelist算法
24.2.1 Indexing/索引
24.2.2 Finding the Best Match/尋找最佳匹配
24.2.3 Appending to a Typelist/添加Typelist
24.2.4 Reversing a Typelist/反轉Typelist
24.2.5 Transforming a Typelist/轉化Typelist
24.2.6 Accumulating Typelists/纍加Typelist
24.2.7 Insertion Sort/插入排序
24.3 Nontype Typelists/非類型Typelists
24.3.1 Deducible Nontype Parameters/可推導的非類型參數
24.4 Optimizing Algorithms with Pack Expansions/使用包擴展優化算法
24.5 Cons-style Typelists/ Cons-style Typelist
24.6 Afternotes/本章後記

25 Tuples 第 25章 元組

25.1 Basic Tuple Design/基本的元組設計
25.1.1 Storage/存儲
25.1.2 Construction/結構
25.2 Basic Tuple Operations/基本的元組操作
25.2.1 Comparison/比較25.2.2 Output/輸齣
25.3 Tuple Algorithms/元組算法
25.3.1 Tuples as Typelists/元組作為Typelist
25.3.2 Adding to and Removing from a Tuple/從元組中添加和移除
25.3.3 Reversing a Tuple/反轉一個元組
25.3.4 Index Lists/索引列錶
25.3.5 Reversal with Index Lists/用索引列錶進行反轉
25.3.6 Shuffle and Select/洗牌算法和選擇算法
25.4 Expanding Tuples/擴展元組
25.5 Optimizing Tuple/優化元組
25.5.1 Tuples and the EBCO/元組和EBCO
25.5.2 Constant-time get()/常數時間的get()
25.6 Tuple Subscript/元組下標
25.7 Afternotes/本章後記

26 Discriminated Unions 第 26章 可識彆的聯閤

26.1 Storage/存儲
26.2 Design/設計
26.3 Value Query and Extraction/值查詢與提取
26.4 Element Initialization, Assignment and Destruction/元素初始化、賦值和銷毀
26.4.1 Initialization/初始化
26.4.2 Destruction/銷毀
26.4.3 Assignment/賦值
26.5 Visitors/訪問
26.5.1 Visit Result Type/訪問結果類型
26.5.2 Common Result Type/常見結果類型
26.6 Variant Initialization an Assignment/變量初始化賦值
26.7 Afternotes/本章後記

27 Expression Templates 第 27章 錶達式模闆

27.1 Temporaries and Split Loops/臨時變量和分割循環
27.2 Encoding Expressions in Template Arguments/在模闆參數中編碼錶達式
27.2.1 Operands of the Expression Templates/錶達式模闆的操作數
27.2.2 The Array Type/ Array類型
27.2.3 The Operators/運算符
27.2.4 Review/迴顧
27.2.5 Expression Templates Assignments/錶達式模闆賦值
27.3 Performance and Limitations of Expression Templates/錶達式模闆的性能與約束
27.4 Afternotes/本章後記

28 Debugging Templates 第 28章 調試模闆

28.1 Shallow Instantiation/淺式實例化
28.2 Static Assertions/靜態斷言
28.3 Archetypes/原型
28.4 Tracers/跟蹤程序
28.5 Oracles/ Oracle
28.6 Afternotes/本章後記

Appendixes/附錄

A The One-Definition Rule 附錄A 一處定義原則

A.1 Translation Units/翻譯單元
A.2 Declarations and Definitions/聲明和定義
A.3 The One-Definition Rule in Detail/一處定義原則的細節
A.3.1 One-per-Program Constraints/程序的一處定義約束
A.3.2 One-per-Translation Unit Constraints/翻譯單元的一處定義約束
A.3.3 Cross-Translation Unit Equivalence Constraints/跨翻譯單元的等價性約束

B Value Categories 附錄B 值類彆

B.1 Traditional Lvalues and Rvalues/傳統的左值和右值
B.1.1 Lvalue-to-Rvalue Conversions/左值和右值轉換
B.2 Value Categories Since C++11/ C++11的值類彆
B.2.1 Temporary Materialization/臨時實體化
B.3 Checking Value Categories with decltype/使用decltype檢查值類彆
B.4 Reference Types/引用類彆

C Overload Resolution 附錄C 重載解析

C.1 When Does Overload Resolution Kick In / 何時應用重載解析
C.2 Simplified Overload Resolution/簡化的重載解析
C.2.1 The Implied Argument for Member Functions/成員函數的隱式參數
C.2.2 Refining the Perfect Match/對最佳匹配進行改進
C.3 Overloading Details/重載的細節
C.3.1 Prefer Nontemplates or More Specialized Templates/優先非模闆還是更加專用的模闆
C.3.2 Conversion Sequences/轉義序列
C.3.3 Pointer Conversions/指針轉換
C.3.4 Initializer Lists/初始化列錶
C.3.5 Functors and Surrogate Functions/仿函數和代理函數
C.3.6 Other Overloading Contexts/其他重載情況

D Standard Type Utilities 附錄D 標準類型實用程序

D.1 Using Type Traits/使用Type Traits
D.1.1 std::integral_constant and std::bool_constant/ std::integral_constant和std::bool_constant
D.1.2 Things You Should Know When Using Traits/使用Trait時應該知道的事
D.2 Primary and Composite Type Categories/主要類型和復閤類型
D.2.1 Testing for the Primary Type Category/測試主要類型的類彆
D.2.2 Test for Composite Type Categories/測試復閤類型的類彆
D.3 Type Properties and Operations/類型屬性和操作
D.3.1 Other Type Properties/其他類型屬性
D.3.2 Test for Specific Operations/測試具體操作
D.3.3 Relationships Between Types/類型之間的關係
D.4 Type Construction/類型結構
D.5 Other Traits/其他Trait
D.6 Combining Type Traits/組閤Type Trait
D.7 Other Utilities/其他應用程序

E Concepts 附錄E 概念

E.1 Using Concepts/使用概念
E.2 Defining Concepts/定義概念
E.3 Overloading on Constraints/重載約束
E.3.1 Constraint Subsumption/約束包含
E.3.2 Constraints and Tag Dispatching/約束和標簽調度
E.4 Concept Tips/概念提示
E.4.1 Testing Concepts/測試概念
E.4.2 Concept Granularity/概念粒度
E.4.3 Binary Compatibility/二進製兼容性

Bibliography 文獻目錄

Forums/論壇

Books and WebSites/圖書和網站

Glossary 術語

Index 索引
C++ 模闆編程精要(第二版) 探索 C++ 模闆的強大力量,解鎖高效、靈活的代碼構建方式。 C++ 模闆是現代 C++ 編程中不可或缺的核心特性之一,它為我們提供瞭編寫泛型代碼的強大機製,能夠實現編譯時代碼生成,從而獲得極緻的性能和卓越的代碼復用能力。本書,C++ 模闆編程精要(第二版),旨在深入剖析 C++ 模闆的方方麵麵,從基礎概念到高級技巧,引導讀者全麵掌握這一強大的工具,並將其融會貫通於實際開發之中。 本書不同於其他泛泛而談的 C++ 教程,它將聚焦於 C++ 模闆這一特定領域,並力求提供最全麵、最深入、最實用的講解。我們將不僅僅是羅列模闆的語法,更重要的是解釋其背後的設計理念,剖析模闆在 C++ 語言中的地位和重要性,以及它如何與其他 C++ 特性協同工作,共同構建齣高效、優雅且易於維護的軟件係統。 為什麼選擇 C++ 模闆? 在軟件開發領域,代碼復用和性能優化是永恒的追求。冗餘的代碼不僅增加瞭開發和維護的成本,也容易引入不一緻性,導緻 bug 的滋生。而 C++ 模闆正是解決這些問題的利器。通過模闆,我們可以編寫一套代碼,能夠應用於多種不同的數據類型,而無需為每種類型編寫重復的代碼。更重要的是,模闆在編譯時生成針對特定類型的特化代碼,消除瞭運行時類型轉換的開銷,帶來瞭接近於原生代碼的性能。 想象一下,你正在開發一個通用的容器類,比如一個鏈錶或一個動態數組。如果沒有模闆,你可能需要為 `int`、`float`、`string` 等每種基本類型分彆編寫一個容器類,這無疑是一項繁瑣且低效的工作。而有瞭模闆,你隻需編寫一個通用的 `List` 或 `Vector`,其中 `T` 就是一個類型參數,可以在實例化時被替換為任何你需要的類型。 更進一步,模闆的應用遠不止於此。它們是 STL(Standard Template Library)的核心,STL 提供瞭大量高質量的泛型容器、算法和迭代器,極大地簡化瞭 C++ 開發。理解模闆,也就理解瞭 STL 的精髓,能夠更有效地利用這一寶貴的資源。 本書將帶你走過的旅程: 本書的內容結構經過精心設計,循序漸進,確保讀者能夠從容地掌握 C++ 模闆的精髓。 第一部分:模闆基礎與核心概念 我們將從最基礎的模闆語法入手,介紹函數模闆和類模闆的基本定義、實例化方式以及如何使用類型參數和非類型參數。這一部分將幫助你建立對模闆的直觀認識,理解模闆是如何工作的。 函數模闆: 學習如何編寫通用的函數,使其能夠處理不同類型的參數。我們將通過實例展示函數模闆在排序、查找、數值計算等場景下的應用。 類模闆: 掌握如何創建通用的類,使其能夠存儲和操作不同類型的數據。我們將深入講解類模闆的定義、實例化以及其在構建數據結構(如棧、隊列、鏈錶)方麵的強大能力。 模闆實例化: 詳細解釋編譯器如何根據模闆生成特定類型的代碼,以及顯式實例化和隱式實例化的區彆和應用場景。 模闆參數推導: 理解編譯器如何自動推導齣函數模闆的類型參數,以及在某些情況下需要手動指定參數的場景。 模闆特化: 學習如何為特定類型提供模闆的特化實現,這對於優化性能、處理特殊情況至關重要。我們將介紹函數模闆特化和類模闆特化。 第二部分:深入理解模闆的機製與技巧 在掌握瞭模闆的基礎知識後,我們將深入探討模闆更深層次的機製和高級技巧,這將極大地拓展你的模闆編程能力。 非類型模闆參數: 探索使用整型、指針、引用等非類型值作為模闆參數的可能性,並展示其在數組類、固定大小容器等場景下的應用。 模闆的模闆參數: 學習如何將模闆本身作為參數傳遞給另一個模闆,這使得編寫更高級彆的泛型組件成為可能。 彆名模闆 (Alias Templates): 掌握使用 `using` 關鍵字為模闆創建彆名的技巧,簡化模闆的使用,提高代碼的可讀性。 可變參數模闆 (Variadic Templates): 這是 C++11 引入的一項革命性特性。我們將詳細講解如何編寫接受任意數量參數的模闆函數和模闆類,這在構建函數包裝器、元編程等領域具有巨大的價值。 模闆元編程 (Template Metaprogramming): 這是一個令人著迷的領域,我們將介紹如何利用模闆在編譯時進行計算和代碼生成。你將學習如何使用模闆實現條件編譯、類型萃取、數值計算等,從而大幅提升程序的性能和靈活性。 SFINAE (Substitution Failure Is Not An Error): SFINAE 是 C++ 模闆編程中一個至關重要的概念,它允許我們根據模闆參數的可用性或特性來選擇性地啓用或禁用模闆的實例化。我們將深入講解 SFINAE 的原理,並演示如何利用它進行重載選擇、類型檢查以及實現更復雜的模闆適配。 第三部分:模闆的高級應用與實踐 本部分將把前麵學到的知識付諸實踐,探討模闆在實際項目中的高級應用場景。 STL 源碼剖析(部分): 通過分析 STL 中一些經典模闆組件(如 `vector`、`map`、`algorithm`)的實現,你可以更直觀地理解模闆在真實世界中的應用,學習大師們的編碼智慧。 構建通用庫: 學習如何利用模闆設計和實現自己的通用庫,提高代碼的可維護性和可擴展性。 設計模式與模闆: 探討模闆如何與各種設計模式(如工廠模式、迭代器模式)結閤,創造齣更靈活、更強大的解決方案。 現代 C++ 特性與模闆的協同: 瞭解 C++11、C++14、C++17、C++20 等新標準中引入的與模闆相關的新特性,以及它們如何與現有模闆機製協同工作,進一步提升代碼的錶達能力和效率。例如,Concepts (C++20) 如何簡化 SFINAE 的使用,`auto` 關鍵字在模闆中的作用等。 性能優化與模闆: 深入討論模闆在性能優化方麵的優勢,以及在編寫高效模闆代碼時需要注意的事項。 本書的特點: 詳實深入: 我們不滿足於錶麵介紹,而是力求剖析模闆的每一個細節,解釋其背後的原理和設計思想。 實踐導嚮: 書中包含大量的代碼示例,力求讓讀者在動手實踐中掌握知識。每個概念都配以清晰易懂的代碼演示。 循序漸進: 內容從易到難,層層遞進,確保不同水平的讀者都能從中受益。 前沿性: 涵蓋瞭現代 C++ 標準中與模闆相關的最新特性,幫助讀者跟上 C++ 發展的步伐。 注重理解: 我們不僅教你“如何做”,更教你“為什麼這麼做”,培養讀者獨立思考和解決問題的能力。 誰適閤閱讀本書? C++ 開發者: 任何希望提升 C++ 編程技能,深入理解 C++ 語言特性的開發者。 STL 深度使用者: 希望理解 STL 底層原理,並能更靈活地使用 STL 的開發者。 對泛型編程感興趣的程序員: 希望掌握編寫高效、復用性強代碼的程序員。 學習 C++11 及之後版本的開發者: 瞭解模闆在現代 C++ 中的重要作用和新特性。 結論: C++ 模闆是一門藝術,也是一門科學。它賦予瞭 C++ 強大的錶達能力和無與倫比的性能潛力。通過本書,你將不僅僅學會使用模闆,更重要的是理解模闆的思想,掌握運用模闆解決復雜問題的技巧,從而成為一名更優秀的 C++ 開發者。立即開啓你的模闆編程之旅,解鎖 C++ 的更多可能!

用戶評價

評分

說實話,《C++ Templates: The Complete Guide, 2nd Edition》這本書的齣版,對於我們這些長期沉浸在C++開發中的老兵來說,絕對是一場及時雨。第一版我雖然沒怎麼細讀,但就從朋友那裏聽來的口碑,就知道它的分量。這次的第二版,聽說在內容上做瞭大量的更新,涵蓋瞭C++標準的演進,這正是大傢最關心的。我現在的項目裏,對泛型編程的需求越來越大,很多時候都需要設計通用的組件來應對各種不同的數據類型和場景。但模闆的理解和運用,確實是一門大學問。有時候一個編譯錯誤,就能讓人頭疼半天,不知道是哪裏齣瞭問題。我希望這本書能幫助我理清模闆推導的邏輯,理解各種模闆元編程的技巧,甚至是一些非常規的操作,比如如何用模闆實現編譯時計算,或者如何編寫能夠自動生成代碼的宏。我特彆關注書中關於Concepts的部分,畢竟Concepts的齣現,對改善模闆的易用性和可讀性有著革命性的意義。如果這本書能提供一些實際的,能夠落地的關於Concepts的應用場景和編寫方法,那就太棒瞭。我一直覺得,C++的強大之處在於它的靈活性和錶達力,而模闆正是這種靈活性和錶達力的重要載體。我希望能通過這本書,將我的模闆編程能力提升到一個新的境界,寫齣既優雅又高效的代碼,從而解決更復雜的問題。

評分

哇,終於入手瞭《C++ Templates: The Complete Guide, 2nd Edition》!我等這本好久瞭,之前的朋友一直跟我安利第二版有多麼多麼好,說是對第一版進行瞭全麵的更新和擴充,尤其是在C++11、14、17甚至20的一些新特性方麵,簡直是模闆編程的聖經。我之前在工作中也接觸過一些模闆,但總感覺似懂非懂,很多高級用法更是望而卻步。這次下定決心要好好啃下來,希望能徹底掌握模闆的精髓,寫齣更高效、更具錶達力的C++代碼。這本書的厚度確實有點嚇人,但翻開目錄,看到那些關於元編程、可變參數模闆、類型萃取、特化、SFINAE等等,我的好奇心一下子就爆棚瞭。我尤其期待它能對STL的設計思想進行深入剖析,畢竟STL可是模闆應用的集大成者,理解瞭STL的源碼,很多問題就能迎刃而解。而且,我聽說第二版還增加瞭許多實際應用的例子,這對我這種喜歡動手實踐的讀者來說簡直是福音。我打算先從基礎概念開始,一步步跟著書中的例子敲代碼,遇到不懂的地方就反復琢磨,務必做到融會貫通。我有一個小小的目標,就是希望讀完這本書後,我能夠自信地去實現一些復雜的設計模式,或者開發齣能夠簡化大量重復性代碼的通用庫。這本書對我來說,不僅僅是一本技術書籍,更像是一次挑戰,一次自我提升的機會。我堅信,通過這本書的學習,我能在C++開發的道路上邁進一大步。

評分

《C++ Templates: The Complete Guide, 2nd Edition》這本書,我早就聽說在C++社區裏是模闆編程方麵的權威之作。這次終於有機會入手,感覺像是拿到瞭一本武林秘籍。我對模闆的理解一直停留在比較淺的層麵,知道怎麼用,但總覺得很多細節和底層邏輯不清楚,特彆是在麵對一些復雜的模闆繼承、嵌套或者是在處理大量類型參數的時候,常常會感到力不從心。我期望這本書能夠係統地梳理模闆的各種概念,從基礎的類模闆、函數模闆,到進階的特化、偏特化,再到更高級的變參模闆、模闆彆名等等。我尤其希望它能深入講解模闆元編程(TMP)的原理和應用,比如如何在編譯時進行類型檢查、生成代碼、或者進行數值計算。我知道TMP非常強大,但也很燒腦,我希望能通過這本書的學習,能找到理解TMP的切入點,並且掌握一些實用的TMP技巧,能夠用它來優化我的代碼,或者實現一些傳統的運行時方法難以解決的問題。而且,我相信第二版肯定包含瞭對C++新標準下模闆特性的更新,比如Concepts,這對於提高模闆代碼的可讀性和可維護性至關重要。我希望能學到如何利用這些新特性,寫齣更健壯、更易於調試的模闆代碼。

評分

說實話,我之前對C++模闆的掌握程度,可以說是“能用就行”的狀態。很多時候,遇到需要用模闆的場景,就硬著頭皮照著例子或者網上的博客寫,寫齣來能跑就行,但裏麵到底是怎麼迴事,常常是稀裏糊塗。這次買瞭《C++ Templates: The Complete Guide, 2nd Edition》,就是想徹底解決這個問題。我希望這本書能從最根本的原理講起,把模闆的各種特性,比如參數推導、實例化、以及各種語法糖背後的實際機製,都講得明明白白。我特彆想瞭解,為什麼模闆在編譯期就可以做這麼多事情,它和傳統的運行時多態有什麼本質的區彆?這本書會不會講到一些模闆的“陷阱”,以及如何避免它們?我希望它能提供很多實際的代碼示例,而且這些示例最好是能夠體現模闆的精妙之處,能夠讓我感受到“哇,原來模闆還能這麼用!”的那種驚嘆。當然,第二版肯定是對最新C++標準的覆蓋,這對我來說是必不可少的,因為我需要跟上技術發展的步伐。我渴望通過這本書,能夠真正掌握模闆這個強大的工具,能夠自信地去設計和實現各種泛型組件,甚至能夠深入到STL的源碼中去理解它的設計哲學。這本書對我而言,是一個提升C++內功的絕佳機會。

評分

拿到《C++ Templates: The Complete Guide, 2nd Edition》這本厚厚的書,我既興奮又有點小小的敬畏。C++模闆這塊,對我來說一直是個既愛又怕的領域。愛它能帶來的強大的抽象能力和代碼復用,怕它的復雜性和有時候讓人摸不著頭腦的編譯錯誤。這本書的第二版,我特地挑選瞭英文原版,因為我一直認為,學習一門編程語言的技術,原版書籍是最能體會其精髓的。我希望這本書能幫我深入理解模闆的各種“黑魔法”,比如模闆的實例化過程,模闆的重載解析,還有那些讓人頭疼的SFINAE(Substitution Failure Is Not An Error)規則。我特彆想知道,書中是怎麼講解模闆元編程的,這是我一直覺得非常高深的部分。是像數學一樣,通過邏輯推導來解決問題?還是有某種抽象的模型可以幫助我們理解?我希望它能循序漸進,從最基本的模闆函數和類開始,慢慢引入更復雜的概念,並且配上大量生動形象的例子。我非常期待書中能夠對STL的底層實現原理進行深入的剖析,例如vector、map、algorithm庫中的模闆是如何設計的,它們的性能是如何優化的。如果能學到一些編寫高性能泛型代碼的技巧,那就更完美瞭。這本書對我來說,不隻是學習工具,更像是一次探索之旅,我想去發現C++模闆最深邃的美麗。

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

評分

此用戶未填寫評價內容

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有