思维导图备注

现代C__语言核心特性解析 - 谢丙堃
首页 收藏书籍 阅读记录
  • 书签 我的书签
  • 添加书签 添加书签 移除书签 移除书签

第33章 协程(C++20)

浏览 1 扫码
  • 小字体
  • 中字体
  • 大字体
2024-04-30 10:01:04
请 登录 再阅读
上一篇:
下一篇:
  • 书签
  • 添加书签 移除书签
  • 封面
  • 版权信息
  • 内容提要
  • 推荐序
  • 前言
    • 为什么要写这本书
    • 本书的组织结构
    • 本书特色
    • 读完这本书你将收获什么
    • 面向读者
    • 致谢
  • 资源与支持
  • 第1章 新基础类型(C++11~C++20)
    • 1.1 整数类型long long
    • 1.2 新字符类型char16_t和char32_t
    • 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.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.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声明(C++11 C++17)
    • 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.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.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.6 总结
  • 第32章 新增预处理器和宏(C++17 C++20)
    • 32.1 预处理器__has_include
    • 32.2 特性测试宏
    • 32.3 新增宏VA_OPT
    • 32.4 总结
  • 第33章 协程(C++20)
    • 33.1 协程的使用方法
    • 33.2 协程的实现原理
    • 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.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 总结
  • 附 录 特性章节对照表
暂无相关搜索结果!
    展开/收起文章目录

    二维码

    手机扫一扫,轻松掌上学

    《现代C__语言核心特性解析 - 谢丙堃》电子书下载

    请下载您需要的格式的电子书,随时随地,享受学习的乐趣!
    EPUB 电子书

    书签列表

      阅读记录

      阅读进度: 0.00% ( 0/0 ) 重置阅读进度