文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
9.5 次要特性
C++20 提供了许多次要的新特性,包括:
- C99 风格的指派初始化器 [Shen et al. 2016]
- 对 lambda 捕获的改进 [Köppe 2017b]
- 泛型 lambda 表达式的模板参数列表 [Dionne 2017]
- 范围
for
中初始化一个额外的变量(§8.7) - 不求值语境中的 lambda 表达式 [Dionne 2016]
- lambda 捕获中的包展开 [Revzin 2017]
- 在一些情况下移除对
typename
的需要 [Vandevoorde 2017] - 更多属性:
[[likely]]
和[[unlikely]]
[Trychta 2016] - 在不使用宏的情况下,
source_location
给出一段代码中的源码位置 [Douglas and Jabot 2019] - 功能测试宏 [Voutilainen and Wakely 2018]
- 条件
explicit
[Revzin and Lavavej 2018] - 有符号整数保证是 2 的补码 [Bastien 2018]
- 数学上的常数,比如
pi
和sqrt2
[Minkovsky and McFarlane 2019] - 位的操作,比如轮转和统计 1 的个数 [Maurer 2019]
其中有些属于改进,但是我担心的是晦涩难懂的新特性的数量之大会造成危害 [Stroustrup 2018d]。对于非专家来说,它们使得语言变得更加难以学习,代码更加难以理解。我反对一些利弊参半的特性(比如,使用指派初始化器的地方原本可以使用 构造函数,那会产生更易于维护的代码)。很多特性具有特殊用途,有些是专家专用
。不过,有的人总是领会不到,一个对某些人有某种好处的特性,对于 C++ 整体可能是个净负债。当然,那些增加写法和语义上的通用性和一致性的小特性,则总是受欢迎的。
从标准化的角度来看,即使最小的特性也需要花时间去处理、记录和实现。这些时间是省不掉的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论