天天看点

《深入理解C++11:C++ 11新特性解析与应用》——2.14 本章小结

在本章中,我们可以看到c++11大大小小共17处改动。这17处改动,主要都是为保持c++的稳定性以及兼容性而增加的。

比如为了兼容c99,c++11引入了4个c99的预定的宏、__func__预定义标识符、_pragma操作符、变长参数定义,以及宽窄字符连接等概念。这些都是错过了c++98标准,却进入了c99的一些标准,为了最大程度地兼容c,c++将这些特性全都纳入c++11。而由于标准的更新,c++11也更新了__cplusplus宏的值,以表示新的标准的到来。而为了稳定性,c++11不仅纳入了c99中的long long类型,还将扩展整型的规则预先定义好。这样一来,就保证了各个编译器扩展内置类型遵守统一的规则。此外,c++11还将做法不一的静态断言做成了编译器级别的支持,以方便程序员使用。而通过抛弃throw()异常描述符和新增可以推导是否抛出异常的noexcept异常描述符,c++11又对标准库大量代码做了改进。

在类方面,c++11先是对非静态成员的初始化做了改进,同时允许sizeof直接作用于类的成员,再者c++11对friend的声明予以了一定扩展,以方便通过模板的方式指定某个类是否是其他类或者函数的友元。而final和override两个关键字的引入,则又为对象编程增加了实用的功能。而在模板方面,c++11则把默认模板参数的概念延伸到了模板函数上。而且局部类型和匿名类型也可以用做模板的实参。这两个约束的解除,使得模板的使用中需要记忆的规则又少了一些。而外部模板声明的引入,c++11又为很看重编译性能的用户提供了一些优化编译时间和内存消耗的方法。

在读者读完并理解了这些特性之后,会发现它们几乎像是一台轰鸣作响的机器上的螺丝钉、润滑油、电线丝。c++标准委员会则通过这些小修小补,让c++11已有的特性看起来更加成熟,更加完美。在这一章里,虽然有的特性会带来一些“小欣喜”,但我们还看不到脱胎换骨、让人眼前一亮的新特性。不过这些零散的特性又确实非常重要,是c++发展中必要的“维护”过程的必然结果。

不过如同我们讲到的,c++11其实已经看起来像一门新的语言了。在接下来的几章中,我们会看到更多更“闪亮”的新特性。如果读者已经等不及了,那么请现在就翻开下一页。

继续阅读