Skip to content

0cch/moderncpp_public

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

《现代C++语言核心特性解析》补充资料

1. C++23标准补充

PDF电子书:查看和下载

C++23标准相比之前的C++20、C++11对于标准的修改并不算大,因此不会对我们编写代码的方式有太大影响,甚至有一些变化是内部发生的,对于大部分人来说可能完全感受不到变化的存在,例如“标识符语法使用UAX31”。如果一定要选择对我们编码有一些影响的,我觉得“显式对象参数”和“多维下标运算符”可以算上,这些特性在C++23标准中算是比较大语法新增项。当然,上述特性还是远不及lambda表达式、不定参数模板、概念和约束等影响深远。总体来说,C++23标准有点类似于C++14标准,主要是对以前标准行为的澄清以及删除以前弃用的功能或放宽限制。

更多的变化可能需要等到C++26标准,包括主要的Execution(执行策略 ),More Ranges work(更多关于范围的工作),Reflection(反射),以及次要的Contracts(契约)和Pattern Matching(模式匹配)。

简单聊几个有趣的特性:

显式对象参数

C++23标准可以使用显式对象参数作为非静态成员函数的第一个参数,即this T self,其中T是模板参数的情况下,编译器可以推导对象CV属性和值类型。

允许重复属性

删除过去标准中对属性重复不必要的限制。

signed size_t 和 size_t 的字面量后缀 z 和 uz

更加容易声明size_t的数据类型了,在类型推导中比较有用。

多维下标运算符

operator[](std::size_t x, std::size_t y)的语法获得了支持,终于有更好的办法表示矩阵等多维数据的元素了。

目录预览:

0. 前言
1. 支持预处理指令 #elifdef 和 #elifndef 
2. 允许重复属性
3. 允许static_assert声明在与求值无关的模板上下文
4. assume 属性
5. 初始化语句允许别名声明
6. 允许在lambda表达式上使用属性
7. 引入auto(x)和auto{x}代替decay-copy
8. char8_t兼容性和可移植性修复
9. 引入翻译字符集
10. consteval if 语句
11. 分隔的转义序列
12. 显式对象参数
13. 标识符语法使用UAX31
14. 允许复合语句末尾的标签(与C语言兼容)
15. signed size_t 和 size_t 的字面量后缀 z 和 uz
16. 可选的lambda表达式中的括号
17. 强制的类成员声明顺序布局
18. 多维下标运算符
19. 具名通用字符转义
20. 明确static_assert 和if constexpr支持bool缩窄转换
21. 允许非字面量变量和goto语句的常量表达式函数
22. 进一步放宽常量表达式函数的限制
23. 禁止混合字符串字面量的连接
24. 删除不可编码的宽字符和多字宽字符字面量
25. 可选的扩展浮点类型
26. 允许static_asserts参数与if constexpr条件语句缩窄转换到bool类型
27. 静态下标运算符函数
28. 支持UTF-8作为可移植源文件编码
29. 明确==和!=操作符的生成规则
30. 修剪行拼接符后的空格
31. 支持#warning预处理指令
32. 更简单的隐式移动
33. 静态函数调用运算符函数

2. 《每天5分钟了解C++新特性》视频PPT

这是一套关于《现代C++语言核心特性解析》的介绍视频,分为42集每集5分钟,概括地介绍了《现代C++语言核心特性解析》里的内容,对于想了解C++新特性但是没时间或者不想深入了解的朋友可能会有一些帮助。

About

《现代C++语言核心特性解析》其他资料

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published