何谓 C++17
2017 年 9 月,国际标准化组织(ISO)正式通过了 C++ 的新版本——C++17。C++17 带来了相当数量的新内容。
C++17 的新增改进
为方便查阅,下面列出 C++17 引入的主要变更。此列表并非穷尽,仅用于凸显关键亮点:
- 类模板实参推导(CTAD)(参见《类模板实参推导(CTAD)与推导指引》章节)
- 可在编译期求值的
if
语句(参见《constexpr if 语句》章节) if
与switch
语句中允许使用初始化语句(在 课程13.y《使用语言参考》中提及)inline
变量(参见《使用 inline 变量在多个文件间共享全局常量》章节)- 折叠表达式(暂无教程)
- 某些情形下的强制复制省略(在《类初始化与复制省略》章节中提及)
- 嵌套命名空间现可简写为
namespace X::Y
(参见《用户自定义命名空间与作用域解析运算符》章节) - 移除
std::auto_ptr
及其他若干已弃用类型 static_assert
不再需要提供诊断文本参数(参见《assert 与 static_assert》章节)std::any
(暂无教程)std::byte
(暂无教程)std::filesystem
(暂无教程)std::optional
(参见《std::optional》章节)std::shared_ptr
现可管理 C 风格数组(但std::make_shared
尚无法创建它们)(参见《std::shared_ptr》章节)std::size
(参见《数组(第二部分)》章节)std::string_view
(参见《std::string_view 简介》章节)- 结构化绑定声明(暂无教程)
- 删除三字符组(trigraphs)
- 模板模板参数中现可使用
typename
(而非class
) - UTF-8 (
u8
) 字符字面量(暂无教程)