【问题标题】:What are the new features in C++17?C++17 有哪些新特性?
【发布时间】:2016-10-29 20:23:51
【问题描述】:

C++17 现在功能齐全,因此不太可能经历大的变化。针对 C++17 提出了数百个提案。

在 C++17 中,C++ 中添加了哪些功能?

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

【问题讨论】:

标签: c++ standards c++-faq c++17


【解决方案1】:

语言特点:

模板和通用代码

拉姆达

属性

语法清理

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

  • Structured bindings

  • 基本上,一流的std::tieauto

  • 示例: * const auto [it, inserted] = map.insert( {"foo", bar} ); * 创建变量itinserted,其类型是从map::insert 返回的pair 推导出来的。

  • 适用于 tuple/pair-likes & std::arrays 和相对扁平的结构

  • 在标准中实际上命名为structured bindings

  • if (init; condition) and switch (init; condition)

  • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)

  • if(decl) 扩展到decl 不能明智地转换为布尔值的情况。

  • Generalizing range-based for loops

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

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

杂项

图书馆补充:

数据类型

调用东西

File System TS v1

New algorithms

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

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

线程

(部分)Library Fundamentals TS v1 上面或下面没有涵盖

容器改进

智能指针变化

其他std 数据类型改进:

杂项

性状

已弃用

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

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

初始列表取自 this reddit postthis reddit post,链接通过谷歌搜索或来自上述 isocpp.org 页面添加。

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

clang's feature listlibrary feature list 将被掠夺。这似乎不可靠,因为它是 C++1z,而不是 C++17。

these slides 在其他地方缺少一些功能。

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

已删除:

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

上面还没有整合的论文:

  • P0505R0 (constexpr chrono)

  • P0418R2(原子调整)

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

  • P0490R0(结构化绑定调整)

  • P0513R0(更改为std::hash

  • P0502R0(并行异常)

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

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

  • P0510R0(变体限制)

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

  • P0497R0(共享 ptr 调整)

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

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

规格变更:

进一步参考:

【讨论】:

  • 嗯,memory_order_consume 似乎没有被官方弃用。只是在注释中不鼓励这样做。提及这一点也许有意义(例如,带有尾随括号)?
猜你喜欢
  • 2017-06-14
  • 2020-04-11
  • 2020-04-09
  • 2015-08-19
  • 2019-03-15
  • 2020-08-12
  • 1970-01-01
  • 2010-10-20
相关资源
最近更新 更多