C ++ 17现在已完成功能,因此不太可能经历大的更改。针对C ++ 17提出了数百个建议。
其中哪些功能是在C ++ 17中添加到C ++的?
使用支持“ C ++ 1z”的C ++编译器时,当编译器更新到C ++ 17时,哪些功能将可用?
C ++ 17现在已完成功能,因此不太可能经历大的更改。针对C ++ 17提出了数百个建议。
其中哪些功能是在C ++ 17中添加到C ++的?
使用支持“ C ++ 1z”的C ++编译器时,当编译器更新到C ++ 17时,哪些功能将可用?
Answers:
[*this]{ std::cout << could << " be " << useful << '\n'; }using在属性中避免必须重复属性名称空间。
现在,要求编译器忽略他们无法识别的非标准属性。
不,throw除非throw(),并且throw()是noexcept(true)。
std::tie的autoconst auto [it, inserted] = map.insert( {"foo", bar} );it并inserted从与推导的类型pair是map::insert回报。std::arrays和相对平坦的结构if (init; condition) 和 switch (init; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)if(decl)到decl不明智地转换为布尔的情况。.then将来的工作。前向进度保证(FPG)(也适用于并行算法的 FPG )
u8'U', u8'T', u8'F', u8'8' 字符文字(字符串已经存在)
std::string 像引用字符数组或子字符串string const&试。也可以使解析速度加快一倍。"hello world"svchar_traitsstd::byte 比他们咀嚼的更多。
std::invoke
std::apply
std::make_from_tuple,std::apply应用于对象构造
is_invocable,is_invocable_r,invoke_result
result_ofis_invocable<Foo(Args...), R>是“能打电话Foo与Args...并获得兼容的东西R”,这里R=void是默认的。invoke_result<Foo, Args...>是std::result_of_t<Foo(Args...)>,但显然不太混淆?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,从一定范围取样?
try_emplace 和 insert_or_assign
对于拼接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 和 lcmstd::uncaught_exceptions
std::as_conststd::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
stdstd::less。<codecvt>memory_order_consumeresult_of,替换为 invoke_resultshared_ptr::unique,它不是很安全的线程从C ++ 14开始,Isocpp.org具有独立的更改列表。它已被部分掠夺。
自然,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_shufflestd::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
memory_order_consume似乎并未正式弃用。注意中不建议这样做。提及这一点也许很有意义(例如,在结尾加上括号)?