[英]What are the new features in C++17?
C++17 现在功能完整,所以不太可能经历大的变化。 为 C++17 提出了数百个提案。
在 C++17 中,C++ 中添加了哪些特性?
当使用支持“C++1z”的 C++ 编译器时,当编译器更新到 C++17 时,哪些特性将可用?
[*this]{ std::cout << could << " be " << useful << '\\n'; }
using
in 属性以避免重复属性命名空间。
现在要求编译器忽略他们不认识的非标准属性。
简单的static_assert(expression);
没有字符串
std::tie
与auto
const auto [it, inserted] = map.insert( {"foo", bar} );
it
并inserted
从与推定的类型pair
那个map::insert
回报。std::array
和相对扁平的结构 if (init; condition)
和switch (init; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
if(decl)
扩展到decl
不能明智地转换为 bool 的情况。.then
用于未来的工作。前向进度保证 (FPG)(还有用于并行算法的FPG)
u8'U', u8'T', u8'F', u8'8'
字符字面量(字符串已经存在)
std::string
类似于对字符数组或子std::string
引用string const&
了。 还可以使解析速度快 bajillion 倍。"hello world"sv
char_traits
std::byte
比他们可以咀嚼的还要多。
std::invoke
std::apply
std::make_from_tuple
, std::apply
应用于对象构造
is_invocable
, is_invocable_r
, invoke_result
result_of
is_invocable<Foo(Args...), R>
是“你能用Args...
调用Foo
Args...
并获得与R
兼容的东西”,其中R=void
是默认值。invoke_result<Foo, Args...>
是std::result_of_t<Foo(Args...)>
但显然不那么令人困惑? [class.directory_iterator]
和[class.recursive_directory_iterator]
[class.directory_iterator]
[class.recursive_directory_iterator]
for_each_n
reduce
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
添加用于线程目的,即使您不使用线程也会暴露
atomic<T>
::is_always_lockfree
std::lock
痛苦。std
算法的并行版本和相关机制[func.searchers]
和[alg.search]
std::function
std::sample
,从一个范围采样?
拼接map<>
、 unordered_map<>
、 set<>
和unordered_set<>
字符串的非常量.data()
。
非成员std::size
、 std::empty
、 std::data
std::begin
/ end
emplace
系列函数现在返回对创建对象的引用。
unique_ptr<T[]>
修复和其他unique_ptr
调整。weak_from_this
和一些固定到共享的std
数据类型改进:C++17 库基于C11 而不是 C99
为未来的标准库保留std[0-9]+
std
实现中已经公开的实用程序代码std::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
大致gcd
和lcm
std::uncaught_exceptions
std::as_const
std::bool_constant
_v
模板变量std::void_t<T>
std::owner_less<void>
std::less<void>
,但用于基于内容排序的智能指针std::chrono
波兰语std::conjunction
, std::disjunction
, std::negation
暴露std::not_fn
std
noexcept 的规则std::less
。<codecvt>
memory_order_consume
result_of
,替换为invoke_result
shared_ptr::unique
,它不是很线程安全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++ 中删除的一些内容((大部分?)以前已弃用):
register
,保留供将来使用的关键字bool b; ++b;
<functional>
东西, random_shuffle
std::function
分配器有改写。 我不确定这些是否对代码有任何影响,或者它们是否只是标准中的清理:
P0505R0 (constexpr 计时)
P0418R2 (原子调整)
P0512R0 (模板参数推导调整)
P0490R0 (结构化绑定调整)
P0513R0 (更改为std::hash
)
P0502R0 (并行异常)
P0509R1 (更新异常处理限制)
P0012R1 (使异常规范成为类型系统的一部分)
P0510R0 (变体限制)
P0504R0 (可选/变体/任何标签)
P0497R0 (共享 ptr 调整)
P0508R0 (结构化绑定节点句柄)
P0521R0 (共享指针使用计数和唯一更改?)
https://isocpp.org/files/papers/p0636r0.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.