others.rst: 新翻译章节「5.24. C++11」

This commit is contained in:
Isaac Ge 2015-07-22 20:42:24 +08:00
parent f584bfd6c4
commit e89c3112d7

View File

@ -796,3 +796,29 @@
5.24. C++11
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. tip::
适当用 C++11前身是 C++0x的库和语言扩展在贵项目用 C++11 特性前三思下可移植性。
定义:
C++11 有众多语言和库上的`变革 <https://en.wikipedia.org/wiki/C%2B%2B11>`_
优点:
在二一四年八月之前C++11 一度是官方标准,被大多 C++ 编译器支持。它标准化很多我们早先就在用的 C++ 扩展,简化了不少操作,大大改善了性能和安全。
缺点:
C++11 相对于前身复杂极了1300 页 vs 800 页!很多开发者也不怎么熟悉它。于是从长远来看,前者特性对代码可读性以及维护代价难以预估。我们说不准什么时候采纳其特性,特别是在被迫依赖老实工具的项目上。
和 Boost 一样,有些 C++11 扩展提倡实则对可读性有害的编程实践——就像去除冗余检查(比如类型名)以帮助读者,或是鼓励模板原编程等等。有些扩展在功能上与原有机制冲突,容易招致困惑以及迁移代价。
决定:
C++11 特性除了个别情况下,可以用一用。除了本指南会有不少章节会加以讨若干 C++11 特性之外,以下特性最好不要用:
- 尾置返回类型,比如用 ``auto foo() -> int`` 代替 ``int foo()``. 为了兼容于现有代码的声明风格。
- 编译时合数 ``<ratio>``, 因为它涉及一个重模板的接口风格。
- ``<cfenv>````<fenv.h>` 头文件,因为编译器尚不支持。
- 默认 lambda 捕获。