第1章 C++17的新特性

C++11,C++14和C++17标准为C++添加了许多新特性。当前的C++已经和10年前的C++完全不同了。C++标准并不是用来规范语言的,其实为了让相应编译器理解相应的语义,也是为了更好的理解C++标准模板库(STL)。

这本书中的例子展示了如何充分的利用STL。不过,作为本书的第1章,我们还是需要了解一下那些比较重要的新语言特性。掌握了这些新的语言特性,有助于你编写可读性高、可维护性强和表达性清晰的代码。

我们将了解到如何单独访问组对、元组和结构化绑定的数据结构的成员,以及如何使用新的ifswitch限制变量的作用范围。新的括号初始化语法于C++11的语法有歧义,虽然看上去是相同的,不过这个已经被新括号初始化规则所修复。模板类实例的类型现在可以从构造函数的参数中自动推断出来,如果对一个模板类进行不同类型的特化,将会产生完全不同的代码,不过现在用constexpr-if就能很容易的表示。大多数情况下,使用折叠表达式处理模板函数的可变参数包,会变得更加容易。最后,在只有头文件的库中使用声明内联变量,来定义全局静态对象会变得更加舒服,这之前的标准中只能在函数中进行。

库的实现者可能比实现应用程序的开发者对本章的示例更感兴趣。虽然我们有足够的理由去了解这些特性,但为了理解本书的其余部分,无需立即理解本章的所有示例。