繁体   English   中英

C++17 有哪些新特性?

[英]What are the new features in C++17?

C++17 现在功能完整,所以不太可能经历大的变化。 为 C++17 提出了数百个提案。

在 C++17 中,C++ 中添加了哪些特性?

当使用支持“C++1z”的 C++ 编译器时,当编译器更新到 C++17 时,哪些特性将可用?

语言特点:

模板和通用代码

拉姆达

属性

语法清理

更清洁的多回程和流量控制

  • 结构化绑定

    • 基本上,一流的std::tieauto
    • 示例:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • 创建的变量itinserted从与推定的类型pair那个map::insert回报。
    • 适用于 tuple/pair-likes & std::array和相对扁平的结构
    • 标准中实际命名的结构化绑定
  • if (init; condition)switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • if(decl)扩展到decl不能明智地转换为 bool 的情况。
  • 泛化基于范围的 for 循环

    • 似乎主要支持哨兵,或者与开始迭代器类型不同的结束迭代器,这有助于以空终止循环等。
  • 如果 constexpr

    • 很多需要的功能来简化几乎通用的代码。

杂项

图书馆补充:

数据类型

调用东西

文件系统 TS v1

新算法

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • 添加用于线程目的,即使您不使用线程也会暴露

穿线

上面或下面未涵盖的(部分) 库基础知识 TS v1

容器改进

智能指针变化

其他std数据类型改进:

杂项

性状

已弃用

Isocpp.org 拥有自 C++14 以来的独立变更列表; 它已被部分掠夺。

自然地,TS 工作并行继续,因此有些 TS 还不够成熟,必须等待下一次迭代。 下一次迭代的目标是之前计划的 C++20,而不是一些传言暗示的 C++19。 已避免使用 C++1O。

这个 reddit 帖子这个 reddit 帖子中获取的初始列表,通过谷歌搜索或从上面的 isocpp.org 页面添加了链接。

SD-6功能测试列表中掠夺的其他条目。

clang 的功能列表库功能列表即将被掠夺。 这似乎不可靠,因为它是 C++1z,而不是 C++17。

这些幻灯片在其他地方缺少一些功能。

虽然没有询问“删除了什么”,但这里列出了在 C++17 中从 C++ 中删除的一些内容((大部分?)以前已弃用):

删除:

有改写。 我不确定这些是否对代码有任何影响,或者它们是否只是标准中的清理:

尚未整合到上面的论文:

  • P0505R0 (constexpr 计时)

  • P0418R2 (原子调整)

  • P0512R0 (模板参数推导调整)

  • P0490R0 (结构化绑定调整)

  • P0513R0 (更改为std::hash

  • P0502R0 (并行异常)

  • P0509R1 (更新异常处理限制)

  • P0012R1 (使异常规范成为类型系统的一部分)

  • P0510R0 (变体限制)

  • P0504R0 (可选/变体/任何标签)

  • P0497R0 (共享 ptr 调整)

  • P0508R0 (结构化绑定节点句柄)

  • P0521R0 (共享指针使用计数和唯一更改?)

规格变化:

进一步参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM