返回介绍

5. C++14:完成 C++11

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

依据大版本和小版本交替发布的计划,C++14 [du Toit 2014] 的目标是完成 C++11(§3.2);也就是说,接受 2009 年特性冻结后的好的想法,纠正最初大规模使用 C++11 标准时发现的问题。对这个有限目标而言,C++14 是成功的。

重要的是,它表明 WG21 可以按时交付标准。反过来,这也使得实现者能够按时交付。在 2014 年年底之前,三个主要的 C++ 实现者(Clang、GCC 和微软)提供了大多数人认为完整的特性。尽管并没有完美地符合标准,但人们基本上可以对所有的特性和特性组合进行实验。要能编译用到所有高级特性的库,还需要延后一些时间(对微软而言要到 2018 年),但对于大多数用户而言,对标准的符合程度足以满足实际使用。标准工作和实现工作已经紧密联系在一起。这给社区带来了很大的不同。

C++14 特性集可以概括为:

  • 二进制字面量,例如 0b1001000011110011
  • §5.1:数字分隔符——为了可读性,例如 0b1001'0000'1111'0011
  • §5.2:变量模板——参数化的常量和变量
  • §5.3:函数返回类型推导
  • §5.4:泛型 lambda 表达式
  • §5.5:constexpr 函数中的局部变量
  • 移动捕获——例如 [p = move(ptr)] {/* ... */}; 将值移入 lambda 表达式
  • 按类型访问元组,例如 x = get<int>(t);
  • 标准库中的用户定义字面量,例如:10i"Hello"s10s3ms55us17ns

这些特性中的大多数都面临着两个问题:很好,什么使你花了这么长的时间?以及谁需要这个?我的印象是,每个新特性都有着重要的需求作为动机——即使该需求不是通用的。在 constexpr 函数中添加局部变量和泛型 lambda 表达式大大改善了人们的代码。

重要的是,从 C++11 升级到 C++14 是相对无痛的,没有 ABI 破坏。经历过从 C++98 到 C++11 这一大而困难的升级的人感到了惊喜:他们升级可以比预想还快,花费的精力也更少。

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

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

发布评论

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