@Rays
2017-04-05T22:34:13.000000Z
字数 1135
阅读 1718
C++
摘要:据Herb Sutter的博客所写,在美国夏威夷Kona举行的冬季会议上,ISO C++标准委员会最终完成了C++17标准的制定工作。本文将对C++17的主要特性做一个简要的概括。
作者: Sergio De Simon
正文:
据Herb Sutter的博客所写,在美国夏威夷Kona举行的冬季会议上,ISO C++标准委员会最终完成了C++17标准的制定工作。下面对C++17的主要特性做简要概括。
Kona会议的主要议程是解决来自一些国家机构的审查意见,并修复一些软件故障,因此并未给出过多的新特性。特别需要指出的是,在Knoa会议上添加了一个新的std::byte
类型,精简了程序对“位导向”(byte-oriented)内存访问的处理方式。目前的实现是依赖于char(无论signed char还是unsigned char)类型的,鉴于char类型还承担了字符类型和算术运算类型的职责,这种实现尚存在着不合理之处。另一方面,std::byte
将会被分离出来作为一个专用类型。
其它C++17主要新特性包括:
可在constexprs中使用Lambda表达式,去除了预先存在的限制。使用constexprs定义的对象或函数可在编译等阶段就进行求值,因此可以实现一些高级的模板参数或数组大小说明符。编译器会确保constexprs对象或函数按设定的需求编译,实现所描述的使用。
允许在Lambda表达式中,以值的形式得到*this
,这对并行代码或使用std::future
的场景具有很大的影响,因为Lambda表达式在执行时无法保证this的有效性。
增加了std::optional
,可使用optinal类型表示某个已定义或尚未定义的值。如果用C++的措辞解释,可以说optional是一种管理对象初始化状态的封装器。
可推断类模板参数的构造函数,这样代码编写可简化为:
auto lock = std::lock_guard(mut_, r1);
而非:
std::lock_guard<std::shared_timed_mutex, std::shared_lock<std::shared_timed_mutex>> lck(mut_, r1);
template <auto v> struct S; //可推断出v的类型。
C++17新特性的列表非常长,这里无法一一列举。推荐Stack Overflow网站上的一篇问题解答,其中对C++17新特性做了一个简洁的归纳,更新至最近的Kona会议内容,并提供了指向官方委员会文档的链接。
查看英文原文: C++17 Is Ready