图书介绍
C++ Templates 第2版 英文版PDF|Epub|txt|kindle电子书版本网盘下载
![C++ Templates 第2版 英文版](https://www.shukui.net/cover/2/34513672.jpg)
- (美)戴维·范德沃德(David Vandevoorde),(德)尼古拉·约祖蒂斯 著
- 出版社: 北京:人民邮电出版社
- ISBN:9787115479938
- 出版时间:2018
- 标注页数:788页
- 文件大小:237MB
- 文件页数:822页
- 主题词:C++语言-程序设计-英文
PDF下载
下载说明
C++ Templates 第2版 英文版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1部分:基本概念3
第1章 函数模板3
1.1 初识函数模板3
1.1.1 定义模板3
1.1.2 使用模板4
1.1.3 二阶段翻译6
1.2 模板参数推导7
1.3 多模板参数9
1.3.1 返回类型的模板参数10
1.3.2 推导返回类型11
1.3.3 作为通用类型返回12
1.4 缺省模板参数13
1.5 重载函数模板15
1.6 但是,难道我们不应该…?20
1.6.1 按值传递还是按引用传递?20
1.6.2 为什么不用inline呢?20
1.6.3 为什么不用constexpr呢?21
1.7 小结21
2 第2章 类模板23
2.1 类模板Stack的实现23
2.1.1 类模板声明24
2.1.2 成员函数的实现26
2.2 类模板Stack的使用27
2.3 类模板的局部使用29
2.3.1 概念29
2.4 友元30
2.5 类模板特化31
2.6 偏特化33
2.7 缺省类模板参数36
2.8 类型别名38
2.9 类模板参数推导40
2.10 模板聚合43
2.11 小结44
3 第3章 非类型模板参数45
3.1 非类型类模板参数45
3.2 非类型函数模板参数48
3.3 非类型模板参数的限制49
3.4 模板参数类型50
3.5 小结54
4 第4章 可变参数模板55
4.1 变参数模板55
4.1.1 可变参数模板实例55
4.1.2 重载可变参数和非可变参数模板57
4.1.3 算符sizeof57
4.2 折叠表达式58
4.3 可变参数模板的应用60
4.4 可变参数类模板和可变参数表达式61
4.4.1 可变参数表达式62
4.4.2 可变参数指数63
4.4.3 可变参数类模板63
4.4.4 可变参数推导指南64
4.4.5 可变参数基类和using65
4.5 小结66
5 第5章 基础技术67
5. 关键字typename67
5.2 零初始化68
5.3 this->的使用70
5.4 原始数组和字符串字面量模板71
5.5 成员模板74
5.5.1 构造.template79
5.5.2 泛型Lambda与成员模板80
5.6 变量模板80
5.7 模板的模板参数83
5.8 小结89
6 第6章 移动语义与enable_if<>91
6.1 完美转发91
6.2 特殊的成员函数模板95
6.3 使用enable_if<>禁用模板98
6.4 使用enable_if<>99
6.5 使用概念简化enable_if<>表达式103
6.6 小结104
7 第7章 按值传递还是按引用传递?105
7.1 按值传递106
7.2 按引用传递108
7.2.1 按常量引用传递108
7.2.2 按非常量引用传递110
7.2.3 按转发传递111
7.3 std::ref()和std::cref()的使用112
7.4 处理字符串字面量常量与原始数组115
7.4.1 字符串字面量常量和原始数组的特殊实现116
7.5 处理返回值117
7.6 模板参数声明推荐118
7.7 小结121
8 第8章 编译时编程123
8.1 模板元编程123
8.2 使用constexpr计算125
8.3 局部特化的执行路径选择127
8.4 SFINAE(替换失败并不是一种错误)129
8.4.1 带有decltype的SFINAE表达式133
8.5 编译时if134
8.6 小结135
9 第9章 在实战中使用模板137
9.1 包含模型137
9.1.1 接器错误137
9.1.2 头文件中的模板139
9.2 模板和inline140
9.3 预编译头文件141
9.4 破译大篇幅错误信息143
9.5 本章后记149
9.6 小结150
10 第10章 基本模板术语151
10.1 “类模板”还是“模板类”?151
10.2 替换、实例化和特化152
10.3 声明和定义153
10.3.1 完全和不完全类型154
10.4 一处定义规则154
10.5 模板实数和模板形参155
10.6 小结156
11 第11章 泛型库157
11.1 Callable157
11.1.1 支持函数对象158
11.1.2 处理成员函数和附加实参160
11.1.3 包装函数调用162
11.2 实现泛型库的其他实用程序164
11.2.1 Type Traits164
11.2.2 std::addressof()166
11.2.3 std::declval()166
11.3 完美转发临时对象167
11.4 引用为模板参数167
11.5 延迟评估171
11.6 编写泛型库时需要考虑的事情172
11.7 小结173
第2部分 深入模板175
12 第12章 深入模板基础177
12.1 参数化宣告177
12.1.1 虚成员函数182
12.1.2 模板链接182
12.1.3 主模板184
12.2 模板形参185
12.2.1 类型形参185
12.2.2 类型形参186
12.2.3 模板的模板形参187
12.2.4 模板参数包188
12.2.5 缺省模板实参.190
12.3 模板实参192
12.3.1 函数模板实参192
12.3.2 类型实参194
12.3.3 非类型实参194
12.3.4 模板的模板实参197
12.3.5 实参的等价性199
12.4 可变参数模板200
12.4.1 包扩展201
12.4.2 在哪里进行包扩展?202
12.4.3 函数的参数包204
12.4.4 多重和嵌套包扩展205
12.4.5 零长度包扩展207
12.4.6 折叠表达式207
12.5 友元209
12.5.1 类模板的友元类.209
12.5.2 类模板的友元函数211
12.5.3 友元模板213
12.6 本章后记213
13 第13章 模板中的名称215
13.1 名称的分类215
13.2 名称的查找217
13.2.1 参数依赖查找(ADL)219
13.2.2 友元声明的ADL220
13.2.3 注入式类名称221
13.2.4 当前实例化223
13.3 解析模板224
13.3.1 非模板的上下文敏感性225
13.3.2 类型的依赖名称228
13.3.3 模板的依赖名称230
13.3.4 使用声明中的依赖名称231
13.3.5 ADL和显式模板实参233
13.3.6 依赖表达式233
13.3.7 编译器错误236
13.4 继承和类模板236
13.4.1 依赖型基类236
13.4.2 依赖型基类237
13.5 本章后记240
14 第14章 实例化243
14.1 按需实例化243
14.2 延迟实例化245
14.2.1 分和全部实例化245
14.2.2 实例化组件246
14.3 C++实例化模型249
14.3.1 二阶段查找249
14.3.2 实例化点250
14.3.3 包含模型254
14.4 实现方案255
14.4.1 贪婪实例化256
14.4.2 询问实例化257
14.4.3 迭代实例化259
14.5 显式实例化260
14.5.1 手动实例化260
14.5.2 式实例化声明262
14.6 编译时if语句263
14.7 在标准库中265
14.8 本章后记266
15 第15章 模板实参推导269
15.1 推导过程269
15.2 推导上下文271
15.3 特殊的推导情况273
15.4 初始化列表274
15.5 形参包275
15.5.1 字面运算符模板277
15.6 右值引用277
15.6.1 引用折叠原则277
15.6.2 转发引用278
15.6.3 完美转发280
15.6.4 推导的惊喜283
15.7 SFINAE(替换失败并不是错误)284
15.7.1 即时上下文285
15.8 推导的限制286
15.8.1 可接受的实参转换287
15.8.2 类模板实参288
15.8.3 缺省调用实参289
15.8.4 异常规范290
15.9 显式函数模板实参291
15.10 从初始化和表达式中推导293
15.10.1 类型说明符294
15.10.2 用decltype表示表达式的类型298
15.10.3 decltype(auto)301
15.10.4 auto推导的特殊情况303
15.10.5 结构化绑定306
15.10.6 型Lambda表达式309
15.11 别名模板312
15.12 类模板实参推导313
15.12.1 推导指南314
15.12.2 隐式推导指南316
15.12.3 其他细节318
15.13 本章后记321
16 第16章 特化和重载323
16.1 当“泛型代码”并不能很好地解决问题时323
16.1.1 透明自定义324
16.1.2 语义透明度325
16.2 重载函数模板326
16.2.1 签名328
16.2.2 重载函数模板的偏序330
16.2.3 正式的排序规则331
16.2.4 模板和非模板332
16.2.5 可变参数函数模板335
16.3 显式特化338
16.3.1 全局类模板特化338
16.3.2 全局函数模板特化342
16.3.3 全局可变模板特化344
16.3.4 全局成员特化344
16.4 局部类模板特化347
16.5 局部可变模板特化351
16.6 本章后记352
17 第17章 未来发展方向353
17.1 宽松的typename原则354
17.2 广义非类型模板参数354
17.3 函数模板的局部特化356
17.4 命名模板实参358
17.5 重载类模板359
17.6 中间包扩展的推导360
17.7 void的规范化361
17.8 模板的类型检查361
17.9 反射元编程363
17.10 包管理工具365
17.11 模块366
第3部分 模板和设计367
18 第18章 模板的多态性369
18.1 动态多态性369
18.2 静态多态性372
18.3 动态多态性与静态多态性375
18.4 概念377
18.5 设计模式的新形式379
18.6 泛型编程380
18.7 本章后记383
19 第19章 Trait的实现385
19.1 一个实例:累加一个序列385
19.1.1 Fixed Trait386
19.1.2 Value Trait389
19.1.3 参数化Trait394
19.2 Trait、Policy和Policy类394
19.2.1 Trait和Policy:区别在哪里?397
19.2.2 成员模板与模板的模板参数398
19.2.3 组合多个policy和/或trait399
19.2.4 用一般迭代器累积399
19.3 类型函数401
19.3.1 元素类型401
19.3.2 转换特点404
19.3.3 谓词特点410
19.3.4 Result Type Traits413
19.4 基于SFINAE的Trait416
19.4.1 SFINAE功能过载416
19.4.2 SFINAE局部特化420
19.4.3 为SFINAE使用泛型Lambda表达式421
19.4.4 SFINAE友好的特征424
19.5 IsConvertibleT428
19.6 检查成员431
19.6.1 检查成员类型431
19.6.2 检查任意成员类型433
19.6.3 检查非类型成员434
19.6.4 使用泛型Lambda表达式检查成员438
19.7 其他Trait技术440
19.7.1 If-Then-Else440
19.7.2 检查不抛出异常的操作443
19.7.3 Trait的便利性446
19.8 类型分类448
19.8.1 确定基本类型448
19.8.2 确定复合类型451
19.8.3 识别函数类型454
19.8.4 确定类类型456
19.8.5 确定枚举类型457
19.9 Policy Traits458
19.9.1 只读参数类型.458
19.10 在标准库中461
19.11 本章后记462
20 第20章 类型属性上的重载465
20.1 算法特化465
20.2 标签调度467
20.3 启用/禁用函数模板469
20.3.1 提供多重特化471
20.3.2 EnableIf在哪里运行?472
20.3.3 编译时if474
20.3.4 概念475
20.4 类的特化477
20.4.1 启用/禁用类模板477
20.4.2 类模板标签调度479
20.5 实例化安全的模板482
20.6 在标准库中487
20.7 本章后记488
21 第21章 模板和继承489
21.1 空白基类最优化489
21.1.1 布局原则490
21.1.2 成员作为基类492
21.2 奇异递归模板模式495
21.2.1 Barton-Nackman技巧497
21.2.2 操作符实现500
21.2.3 门面模式501
21.3 Mixin508
21.3.1 令人好奇的Mixin510
21.3.2 参数化的虚拟性510
21.4 指定模板参数512
21.5 本章后记515
22 第22章 桥接静态和动态多态性517
22.1 函数对象、指针和std::function<>517
22.2 广义函数指针519
22.3 桥接口522
22.4 类型擦除523
22.5 可选桥接525
22.6 性能考虑527
22.7 本章后记528
23 第23章 元编程529
23.1 现代C++元编程的状态529
23.1.1 取值元编程529
23.1.2 类型元编程531
23.1.3 合元编程532
23.1.4 单元类型的混合元编程534
23.2 反射元编程的维数537
23.3 递归实例化的代价539
23.3.1 跟踪所有实例540
23.4 计算完整性542
23.5 递归实例化与递归模板参数542
23.6 枚举值与静态常量543
23.7 本章后记545
24 第24章 Typelist549
24.1 Typelist解析549
24.2 Typelist算法551
24.2.1 索引551
24.2.2 寻找最佳匹配552
24.2.3 添加Typelist555
24.2.4 反转Typelist557
24.2.5 转化Typelist559
24.2.6 累加Typelist560
24.2.7 插入排序563
24.3 非类型Typelist566
24.3.1 推导的非类型参数568
24.4 使用包扩展优化算法569
24.5 Cons-style Typelist571
24.6 本章后记573
25 第25章 元组575
25.1 基本的元组设计576
25.1.1 存储576
25.1.2 结构578
25.2 基本的元组操作579
25.2.1 比较579
25.2.2 输出580
25.3 元组算法581
25.3.1 元组作为Typelist581
25.3.2 从元组中添加和移除582
25.3.3 反转一个元组584
25.3.4 索引列表585
25.3.5 用索引列表进行反转586
25.3.6 洗牌算法和选择算法588
25.4 扩展元组592
25.5 优化元组593
25.5.1 元组和EBCO593
25.5.2 常数时间的get()598
25.6 元组下标599
25.7 本章后记601
26 第26章 可识别的联合603
26.1 存储604
26.2 设计606
26.3 值查询与提取610
26.4 元素初始化、赋值和销毁611
26.4.1 初始化611
26.4.2 销毁612
26.4.3 赋值613
26.5 访问617
26.5.1 访问结果类型621
26.5.2 常见结果类型622
26.6 变量初始化赋值624
26.7 本章后记628
27 第27章 表达式模板629
27.1 临时变量和分割循环630
27.2 在模板参数中编码表达式635
27.2.1 表达式模板的操作数636
27.2.2 Array类型639
27.2.3 运算符642
27.2.4 回顾643
27.2.5 表达式模板赋值645
27.3 表达式模板的性能与约束646
27.4 本章后记647
28 第28章 调试模板651
28.1 浅式实例化652
28.2 静态断言654
28.3 原型655
28.4 跟踪程序657
28.5 Oracle662
28.6 本章后记662
附录663
A 附录A一处定义原则663
A.1 翻译单元663
A.2 声明和定义664
A.3 一处定义原则的细节665
A.3.1 程序的一处定义约束665
A.3.2 翻译单元的一处定义约束667
A.3.3 跨翻译单元的等价性约束669
B 附录B 值类别673
B.1 传统的左值和右值673
B.1.1 左值和右值转换674
B.2 C++11的值类别674
B.2.1 临时实体化676
B.3 使用decltype检查值类别678
B.4 引用类别679
C 附录C重载解析681
C.1 何时应用重载解析?681
C.2 简化的重载解析682
C.2.1 成员函数的隐式参数684
C.2.2 对最佳匹配进行改进686
C.3 重载的细节688
C.3.1 优先非模板还是更加专用的模板688
C.3.2 转义序列689
C.3.3 指针转换689
C.3.4 初始化列表691
C.3.5 仿函数和代理函数694
C.3.6 其他重载情况695
D 附录D 标准类型实用程序697
D.1 使用Type Traits697
D.1.1 std::integral_constant和std::bool_constant698
D.1.2 使用Trait时应该知道的事700
D.2 主要类型和复合类型702
D.2.1 测试主要类型的类别702
D.2.2 测试复合类型的类别706
D.3 类型属性和操作709
D.3.1 其他类型属性709
D.3.2 测试具体操作718
D.3.3 类型之间的关系725
D.4 类型结构728
D.5 其他Trait732
D.6 组合Type Trait734
D.7 其他应用程序737
E 附录E概念739
E.1 使用概念739
E.2 定义概念742
E.3 重载约束743
E.3.1 约束包含744
E.3.2 约束和标签调度745
E.4 概念提示746
E.4.1 测试概念746
E.4.2 概念粒度746
E.4.3 二进制兼容性747
文献目录749
论坛749
图书和网站750
术语759
索引771