返回介绍

9.5 次要特性

发布于 2024-08-19 12:44:36 字数 1104 浏览 0 评论 0 收藏 0

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]
  • 数学上的常数,比如 pisqrt2 [Minkovsky and McFarlane 2019]
  • 位的操作,比如轮转和统计 1 的个数 [Maurer 2019]

其中有些属于改进,但是我担心的是晦涩难懂的新特性的数量之大会造成危害 [Stroustrup 2018d]。对于非专家来说,它们使得语言变得更加难以学习,代码更加难以理解。我反对一些利弊参半的特性(比如,使用指派初始化器的地方原本可以使用 构造函数,那会产生更易于维护的代码)。很多特性具有特殊用途,有些是专家专用。不过,有的人总是领会不到,一个对某些人有某种好处的特性,对于 C++ 整体可能是个净负债。当然,那些增加写法和语义上的通用性和一致性的小特性,则总是受欢迎的。

从标准化的角度来看,即使最小的特性也需要花时间去处理、记录和实现。这些时间是省不掉的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文