在芬兰奥卢的最后一场会议中,ISO C++ 委员会完成了 C++17 功能列表的定义。在会议中,通过了许多新的语言和库的功能,包括 constexpr if、template <auto>、结构化绑定和一些其他的功能。
正如委员会成员 Jens Weller 所写道,现在功能列表已经完成,即将开始复查阶段:
接下来的两次会议主要会推进复查、反馈和国家级机构标记的问题。这不会给标准增加新的内容,但是可能有轻微或重大变化。
在奥卢的最后一次委员会议上,C++17 新增的功能中,Weller 强调了以下功能:
std::variant,它提供了一个安全、范式、基于栈的可区别 union 容器。if constexpr(expression),它可以看作 C++ 版本中编译期的if。- Template
auto,它允许使用 auto 声明非类型的模版参数。这会允许开发者们写这样的代码:
template <auto value=""> void f() { }
f(); // deduces int</auto>
tuple<t1> get_tuple();
auto [a , b , c] = get_tuple();</t1>
if和which中的变量声明与for循环中已经允许的格式相似:
map<int> mymap;
if (auto result = mymap.insert(value); result.second) {
// insert succeeded, and result is valid for this block
use(result.first); // ok
// ...
}
</int>
另外,Sutter 提到了其他一些值得强调的新特性,包括:
- 为字节对齐数据动态内存分配
- 保证副本省略,这可以确保当你使用一个值传递的对象来初始化本地变量时,编译器不会执行任何额外的复制或移动,就像 C++11 里一样。
上面的列表中只包括了上一次委员会议中通过的新特性,但是新 C++17 中的功能列表部分会更长一些。如欲获取审核过程结束后新标准中的内容概览,请在 Stack Overflow 跟帖中查看。
查看英文原文: C++17 Feature List is Now Complete, Enters Review
感谢张龙对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。




