IE盒子

搜索
查看: 129|回复: 0

C++11 -> C++14 -> C++17

[复制链接]

5

主题

12

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2023-7-20 18:15:16 | 显示全部楼层 |阅读模式
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 字符字面值;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表