英文原文:C 17 Feature List is Now Complete, Enters Review

  在芬兰奥卢的最后一场会议中,ISO C 委员会完成了C 17 功能列表的定义。在会议中,通过了许多新的语言和库的功能,包括constexpr iftemplate <auto>、结构化绑定和一些其他的功能。

  正如委员会成员 Jens Weller 所写道,现在功能列表已经完成,即将开始复查阶段:

接下来的两次会议主要会推进复查、反馈和国家级机构标记的问题。这不会给标准增加新的内容,但是可能有轻微或重大变化。

  在奥卢的最后一次委员会议上,C 17 新增的功能中,Weller 强调了以下功能:

  • std::variant,它提供了一个安全、范式、基于栈的可区别 union 容器。

  • if constexpr (expression),它可以看作 C 版本中编译期的 if

  • Template auto,它允许使用 auto 声明非类型的模版参数。这会允许开发者们写这样的代码:

template void f () { } f<10>(); // deduces int

  • Herb Sutter 强调了这个功能开启的许多可能性,例如在一个函数模版内部而不是通过许多模板特化来囊括所有它的算法特例情况。

  • 结构化绑定,它使得在元组中声明并初始化多个变量成为可能:

tuple get_tuple (); auto [a , b , c] = get_tuple ();

map mymap; if (auto result = mymap.insert (value); result.second) { // insert succeeded, and result is valid for this block use (result.first); // ok // ... }

  另外,Sutter 提到了其他一些值得强调的新特性,包括:

  上面的列表中只包括了上一次委员会议中通过的新特性,但是新C 17 中的功能列表部分会更长一些。如欲获取审核过程结束后新标准中的内容概览,请在 Stack Overflow 跟帖中查看。