找传奇、传世资源到传世资源站!

现代C 语言核心特性解析.epub

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

现代C  语言核心特性解析.epub
from clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboardfrom clipboard  目      录
  
版权信息
版 权
内容提要
推荐序
前言
资源与支持
第1章 新基础类型(C 11~C 20)
1.1 整数类型long long
1.2 新字符类型char16_t和char32_t
1.2.1 字符集和编码方法
1.2.2 使用新字符类型char16_t和char32_t
1.2.3 wchar_t存在的问题
1.2.4 新字符串连接
1.2.5 库对新字符类型的支持
1.3 char8_t字符类型
1.4 总结
第2章 内联和嵌套命名空间(C 11~C 20)
2.1 内联命名空间的定义和使用
2.2 嵌套命名空间的简化语法
2.3 总结
第3章 auto占位符(C 11~C 17)
3.1 重新定义的auto关键字
3.2 推导规则
3.3 什么时候使用auto
3.4 返回类型推导
3.5 lambda表达式中使用auto类型推导
3.6 非类型模板形参占位符
3.7 总结
第4章 decltype说明符(C 11~C 17)
4.1 回顾typeof和typeid
4.2 使用decltype说明符
4.3 推导规则
4.4 cv限定符的推导
4.5 decltype(auto)
4.6 decltype(auto)作为非类型模板形参占位符
4.7 总结
第5章 函数返回类型后置(C 11)
5.1 使用函数返回类型后置声明函数
5.2 推导函数模板返回类型
5.3 总结
第6章 右值引用(C 11 C 17 C 20)
6.1 左值和右值
6.2 左值引用
6.3 右值引用
6.4 右值的性能优化空间
6.5 移动语义
6.6 值类别
6.7 将左值转换为右值
6.8 万能引用和引用折叠
6.9 完美转发
6.10 针对局部变量和右值引用的隐式移动操作
6.11 总结
第7章 lambda表达式(C 11~C 20)
7.1 lambda表达式语法
7.2 捕获列表
7.2.1 作用域
7.2.2 捕获值和捕获引用
7.2.3 特殊的捕获方法
7.3 lambda表达式的实现原理
7.4 无状态lambda表达式
7.5 在STL中使用lambda表达式
7.6 广义捕获
7.7 泛型lambda表达式
7.8 常量lambda表达式和捕获*this
7.9 捕获[=, this]
7.10 模板语法的泛型lambda表达式
7.11 可构造和可赋值的无状态lambda表达式
7.12 总结
第8章 非静态数据成员默认初始化(C 11 C 20)
8.1 使用默认初始化
8.2 位域的默认初始化
8.3 总结
第9章 列表初始化(C 11 C 20)
9.1 回顾变量初始化
9.2 使用列表初始化
9.3 std::initializer_list详解
9.4 使用列表初始化的注意事项
9.4.1 隐式缩窄转换问题
9.4.2 列表初始化的优先级问题
9.5 指定初始化
9.6 总结
第10章 默认和删除函数(C 11)
10.1 类的特殊成员函数
10.2 显式默认和显式删除
10.3 显式删除的其他用法
10.4 explicit和=delete
10.5 总结
第11章 非受限联合类型(C 11)
11.1 联合类型在C 中的局限性
11.2 使用非受限联合类型
11.3 总结
第12章 委托构造函数(C 11)
12.1 冗余的构造函数
12.2 委托构造函数
12.3 委托模板构造函数
12.4 捕获委托构造函数的异常
12.5 委托参数较少的构造函数
12.6 总结
第13章 继承构造函数(C 11)
13.1 继承关系中构造函数的困局
13.2 使用继承构造函数
13.3 总结
第14章 强枚举类型(C 11 C 17 C 20)
14.1 枚举类型的弊端
14.2 使用强枚举类型
14.3 列表初始化有底层类型枚举对象
14.4 使用using打开强枚举类型
14.5 总结
第15章 扩展的聚合类型(C 17 C 20)
15.1 聚合类型的新定义
15.2 聚合类型的初始化
15.3 扩展聚合类型的兼容问题
15.4 禁止聚合类型使用用户声明的构造函数
15.5 使用带小括号的列表初始化聚合类型对象
15.6 总结
第16章 override和final说明符(C 11)
16.1 重写、重载和隐藏
16.2 重写引发的问题
16.3 使用override说明符
16.4 使用final说明符
16.5 override和final说明符的特别之处
16.6 总结
第17章 基于范围的for循环(C 11 C 17 C 20)
17.1 烦琐的容器遍历
17.2 基于范围的for循环语法
17.3 begin和end函数不必返回相同类型
17.4 临时范围表达式的陷阱
17.5 实现一个支持基于范围的for循环的类
17.6 总结
第18章 支持初始化语句的if和switch(C 17)
18.1 支持初始化语句的if
18.2 支持初始化语句的switch
18.3 总结
第19章 static_assert声明
19.1 运行时断言
19.2 静态断言的需求
19.3 静态断言
19.4 单参数static_assert
19.5 总结
第20章 结构化绑定(C 17 C 20)
20.1 使用结构化绑定
20.2 深入理解结构化绑定
20.3 结构化绑定的3种类型
20.3.1 绑定到原生数组
20.3.2 绑定到结构体和类对象
20.3.3 绑定到元组和类元组的对象
20.4 实现一个类元组类型
20.5 绑定的访问权限问题
20.6 总结
第21章 noexcept关键字(C 11 C 17 C 20)
21.1 使用noexcept代替throw
21.2 用noexcept来解决移动构造问题
21.3 noexcept和throw()
21.4 默认使用noexcept的函数
21.5 使用noexcept的时机
21.6 将异常规范作为类型的一部分
21.7 总结
第22章 类型别名和别名模板(C 11 C 14)
22.1 类型别名
22.2 别名模板
22.3 总结
第23章 指针字面量nullptr(C 11)
23.1 零值整数字面量
23.2 nullptr关键字
23.3 总结
第24章 三向比较(C 20)
24.1 “太空飞船”(spaceship)运算符
24.2 三向比较的返回类型
24.2.1 std::strong_ordering
24.2.2 std::weak_ordering
24.2.3 std::partial_ordering
24.3 对基础类型的支持
24.4 自动生成的比较运算符函数
24.5 兼容旧代码
24.6 总结
第25章 线程局部存储(C 11)
25.1 操作系统和编译器对线程局部存储的支持
25.2 thread_local说明符
25.3 总结
第26章 扩展的inline说明符(C 17)
26.1 定义非常量静态成员变量的问题
26.2 使用inline说明符
26.3 总结
第27章 常量表达式(C 11~C 20)
27.1 常量的不确定性
27.2 constexpr值
27.3 constexpr函数
27.4 constexpr构造函数
27.5 对浮点的支持
27.6 C 14标准对常量表达式函数的增强
27.7 constexpr lambdas表达式
27.8 constexpr的内联属性
27.9 if constexpr
27.10 允许constexpr虚函数
27.11 允许在constexpr函数中出现Try-catch
27.12 允许在constexpr中进行平凡的默认初始化
27.13 允许在constexpr中更改联合类型的有效成员
27.14 使用consteval声明立即函数
27.15 使用constinit检查常量初始化
27.16 判断常量求值环境
27.17 总结
第28章 确定的表达式求值顺序(C 17)
28.1 表达式求值顺序的不确定性
28.2 表达式求值顺序详解
28.3 总结
第29章 字面量优化(C 11~C 17)
29.1 十六进制浮点字面量
29.2 二进制整数字面量
29.3 单引号作为整数分隔符
29.4 原生字符串字面量
29.5 用户自定义字面量
29.6 总结
第30章 alignas和alignof(C 11 C 17)
30.1 不可忽视的数据对齐问题
30.2 C 11标准之前控制数据对齐的方法
30.3 使用alignof运算符
30.4 使用alignas说明符
30.5 其他关于对齐字节长度的支持
30.6 C 17中使用new分配指定对齐字节长度的对象
30.7 总结
第31章 属性说明符和标准属性(C 11~C 20)
31.1 GCC的属性语法
31.2 MSVC的属性语法
31.3 标准属性说明符语法
31.4 使用using打开属性的命名空间
31.5 标准属性
31.5.1 noreturn
31.5.2 carries_dependency
31.5.3 deprecated
31.5.4 fallthrough
31.5.5 nodiscard
31.5.6 maybe_unused
31.5.7 likely和unlikely
31.5.8 no_unique_address
31.6 总结
第32章 新增预处理器和宏(C 17 C 20)
32.1 预处理器__has_include
32.2 特性测试宏
32.2.1 属性特性测试宏
32.2.2 语言功能特性测试宏
32.2.3 标准库功能特性测试宏
32.3 新增宏VA_OPT
32.4 总结
第33章 协程(C 20)
33.1 协程的使用方法
33.2 协程的实现原理
33.2.1 co_await运算符原理
33.2.2 co_yield运算符原理
33.2.3 co_return运算符原理
33.2.4 promise_type的其他功能
33.3 总结
第34章 基础特性的其他优化(C 11~C 20)
34.1 显式自定义类型转换运算符(C 11)
34.2 关于std::launder()(C 17)
34.3 返回值优化(C 11~C 17)
34.4 允许按值进行默认比较(C 20)
34.5 支持new表达式推导数组长度(C 20)
34.6 允许数组转换为未知范围的数组(C 20)
34.7 在delete运算符函数中析构对象(C 20)
34.8 调用伪析构函数结束对象声明周期(C 20)
34.9 修复const和默认复制构造函数不匹配造成无法编译的问题(C 20)
34.10 不推荐使用volatile的情况(C 20)
34.11 不推荐在下标表达式中使用逗号运算符(C 20)
34.12 模块(C 20)
34.13 总结
第35章 可变参数模板(C 11 C 17 C 20)
35.1 可变参数模板的概念和语法
35.2 形参包展开
35.3 sizeof...运算符
35.4 可变参数模板的递归计算
35.5 折叠表达式
35.6 一元折叠表达式中空参数包的特殊处理
35.7 using声明中的包展开
35.8 lambda表达式初始化捕获的包展开
35.9 总结
第36章 typename优化(C 17 C 20)
36.1 允许使用typename声明模板形参
36.2 减少typename使用的必要性
36.3 总结
第37章 模板参数优化(C 11 C 17 C 20)
37.1 允许常量求值作为所有非类型模板的实参
37.2 允许局部和匿名类型作为模板实参
37.3 允许函数模板的默认模板参数
37.4 函数模板添加到ADL查找规则
37.5 允许非类型模板形参中的字面量类类型
37.6 扩展的模板参数匹配规则
37.7 总结
第38章 类模板的模板实参推导(C 17 C 20)
38.1 通过初始化构造推导类模板的模板实参
38.2 拷贝初始化优先
38.3 lambda类型的用途
38.4 别名模板的类模板实参推导
38.5 聚合类型的类模板实参推导
38.6 总结
第39章 用户自定义推导指引(C 17)
39.1 使用自定义推导指引推导模板实例
39.2 聚合类型类模板的推导指引
39.3 总结
第40章 SFINAE(C 11)
40.1 替换失败和编译错误
40.2 SFINAE规则详解
40.3 总结
第41章 概念和约束(C 20)
41.1 使用std::enable_if约束模板
41.2 概念的背景介绍
41.3 使用concept和约束表达式定义概念
41.4 requires子句和约束检查顺序
41.5 原子约束
41.6 requires表达式
41.6.1 简单要求
41.6.2 类型要求
41.6.3 复合要求
41.6.4 嵌套要求
41.7 约束可变参数模板
41.8 约束类模板特化
41.9 约束auto
41.10 总结
第42章 模板特性的其他优化(C 11 C 14)
42.1 外部模板(C 11)
42.2 连续右尖括号的解析优化(C 11)
42.3 friend声明模板形参(C 11)
42.4 变量模板(C 14)
42.5 explicit(bool)
42.6 总结
附 录 特性章节对照表

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复