何谓 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) 字符字面量(暂无教程)
