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
的auto
const auto [it, inserted] = map.insert( {"foo", bar} );
it
并inserted
从与推导的类型pair
是map::insert
回报。std::array
s和相对平坦的结构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"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>
是“能打电话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
和 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
std::less
。<codecvt>
memory_order_consume
result_of
,替换为 invoke_result
shared_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_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
memory_order_consume
似乎并未正式弃用。注意中不建议这样做。提及这一点也许很有意义(例如,在结尾加上括号)?