6.24. C++11

Tip

适当用 C++11(前身是 C++0x)的库和语言扩展,在贵项目用 C++11 特性前三思可移植性。

定义:

C++11 有众多语言和库上的变革 <[https://en.wikipedia.org/wiki/C%2B%2B11](https://en.wikipedia.org/wiki/C%2B%2B11)>_ 。

优点:

在二〇一四年八月之前,C++11 一度是官方标准,被大多 C++ 编译器支持。它标准化很多我们早先就在用的 C++ 扩展,简化了不少操作,大大改善了性能和安全。

缺点:

C++11 相对于前身,复杂极了:1300 页 vs 800 页!很多开发者也不怎么熟悉它。于是从长远来看,前者特性对代码可读性以及维护代价难以预估。我们说不准什么时候采纳其特性,特别是在被迫依赖老实工具的项目上。和 6.23. Boost 库 一样,有些 C++11 扩展提倡实则对可读性有害的编程实践——就像去除冗余检查(比如类型名)以帮助读者,或是鼓励模板元编程等等。有些扩展在功能上与原有机制冲突,容易招致困惑以及迁移代价。

缺点:

C++11 特性除了个别情况下,可以用一用。除了本指南会有不少章节会加以讨若干 C++11 特性之外,以下特性最好不要用:- 尾置返回类型,比如用 auto foo() -> int 代替 int foo(). 为了兼容于现有代码的声明风格。- 编译时合数 <ratio>, 因为它涉及一个重模板的接口风格。- <cfenv><fenv.h> 头文件,因为编译器尚不支持。- 默认 lambda 捕获。