|
C++11
什么是C++11?
在 2011 年 8 月 12 日,ISO (International Organization for Standardization) 通过了 C++ 新版本,该版本被称为 C++11。C++11添加了新的特性集合到 C++ 语言中,关于这些特性的使用是可选择的,如果你选择不使用也没有影响,但这些新特性在某些场景中会很实用。
C++11的设计目标
Bjarne Stroustrup 总结了 C++11 的目标如下:
- 基于 C++ 的优势,使其在自己擅长的方面做得更好,而不是将 C++ 扩展到其不擅长的新领域 (如:Windows GUI);
- 使 C++ 更容易学习、使用和教学,提供了使语言更一致和更容易使用的功能;
- 尽可能保持其与 C++ 和 C 的旧版本的稳定性和兼容性,在 C++03 支持下的程序在 C++11 下也能正常运作;
- 将核心语言扩展的数量保持在最低限度,并将大部分更改放在标准库中;
- 关注于改进抽象机制(类、模板),而不是添加机制来处理特定的、狭窄的情况;
- 为新手和专家添加新功能;
- 增加类型安全性,防止意外错误;
- 提高性能,并允许 C++ 直接与硬件一起工作;
- 考虑可用性和生态系统问题,C++ 需要与其他工具一起工作,易于使用和教学等。
C++11中主要的新特性
以下为 C++11 的主要特性列表,并不详细。
- atuo (The auto keyword);
- char16_t 和 char32_t,还有支持这两类型的新字面值;
- constexpr (constexpr);
- decltype;
- 默认说明符 (default specifier);
- 委托构造函数 (Delegating constructing);
- delete 关键字 (delete);
- Enum 类 (Enum);
- 外部模板;
- Lambda 表达式 (Lambda) 和 Lambda 表达式捕获 (captures);
- long long int (long long int);
- 移动构造函数和移动赋值 (Move Constructors and move assignment);
- noexcept 说明符 (noexcept);
- nullptr (nullptr);
- override 和 final 说明符 (override and final specifiers);
- 基于范围的 for 语句 (for-each);
- 右值引用 (R-value references);
- static_cast (static_assert);
- std::initializer_list (std::initializer_list);
- 尾随返回类型语法 (trailing return type);
- 类型别名 (Type aliases);
- typedef 可以对泛型类使用;
- 标准初始化 (Uniform Initialization);
- 用户定义的字面值;
- 可变模板;
- >> 可以被正确的解释为关闭泛型对象;
同时,在 C++ 的标准库中添加了以下新类以便于使用:
- 更好的支持多线程和本地线程存储功能;
- Hash 表;
- 随机数的生成提升 (Random number generation);
- 引用封装;(Object slicing);
- 正则表达式;
- std::auto_ptr 已被弃用;
- std::tuple 被添加 (Return values by value);
- std::unique_ptr 智能指针被添加 (std::unique_ptr);
C++14
什么是 C++14?
在 2014年 8 月 18 日,ISO (International Organization for Standardization) 通过了 C++ 新版本,该版本被称为 C++14。不像 C++11 添加了大量的新功能,C++14 相对来讲只是做了很小的更新,主要是 Bug 的修复和小量的提升。
C++14 新提升
以下为 C++14 主要的优化列表,并非全部:
- 聚合成员初始化 (Aggregate member initialization);
- 二进制字面值 (Binary literals);
- [[deprecated]] 属性
- 数字分隔符 (Digit Separator);
- 函数返回类型推测 (auto);
- 通用 Lambda 表达式 (Lambda);
- 简单的constexpr 功能;
- 变量泛型
- std::make_unique (std::make_unique);
C++17
什么是 C++17?
在 2017年 9 月,ISO (International Organization for Standardization) 通过了 C++ 新版本,该版本被称为 C++17。C++17 包含大量新的内容。
C++17 新提升
以下为 C++17 主要的优化列表,并非全部:
- __has_include 预处理说明符,用于检查可选的头文件是否可用;
- if 语句可以在编译时进行解译;
- 可以在 if 和 switch 语句中进行初始值预设;
- inline 变量;
- Fold 表达式;
- 嵌套命名空间可以被定义为 namespace X::Y 形式;
- 移除了 std::auto_ptr 和其他不推荐的类型;
- static_cast 不再需要诊断文本消息参数;
- std::any;
- std::byte;
- std::filesystem;
- std::optional;
- std::shared_ptr 可以用来管理 C-类型数组,但是 std::make_shared 不可以创建对应 std::shared_ptr;
- std::size;
- std::string_view;
- 结构化绑定声明;
- 构造函数的泛型推测;
- Trigraphs 被移除;
- typename 可以在泛型参数中使用;
- UTF-8 字符字面值;
|
|