文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5. C++14:完成 C++11
依据大版本和小版本交替发布的计划,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"s
,10s
,3ms
,55us
,17ns
这些特性中的大多数都面临着两个问题:很好,什么使你花了这么长的时间?
以及谁需要这个?
我的印象是,每个新特性都有着重要的需求作为动机——即使该需求不是通用的。在 constexpr
函数中添加局部变量和泛型 lambda 表达式大大改善了人们的代码。
重要的是,从 C++11 升级到 C++14 是相对无痛的,没有 ABI 破坏。经历过从 C++98 到 C++11 这一大而困难的升级的人感到了惊喜:他们升级可以比预想还快,花费的精力也更少。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论