哪些特性是在C++17中添加到C++中的?
当使用支持“C++1Z”的C++编译器时,当编译器更新到C++17时,这些功能中的哪些是可用的?
>
类模板的模板参数推演
模板
(折叠+...+表达式)和修订
auto{8};
是int
使用...
和列表更新
null
[*this]{std::cout<<可能<<“是”<<有用<<'\n';}
>
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
属性
命名空间
的[[s]]
和枚举{erator[[s]]}
在属性中使用
以避免重复属性命名空间。
编译器现在被要求忽略他们无法识别的非标准属性。
- C++14的措辞允许编译器拒绝未知范围的属性。
>
内联变量
null
简单的
static_assert(expression);
不带字符串
除非
throw()
,否则没有throw
,并且throw()
是noexcept(true)
。
>
结构化绑定
- 基本上,具有
auto
的一流std::tie
- 示例:
const auto[it,inserted]=map.insert({“foo”,bar});
- 根据
map::insert
返回的对
创建具有推导类型的变量it
和insert
。
if(const auto[it,inserted]=map.insert({“foo”,bar});inserted)
- 将
if(decl)
扩展到decl
不能合理转换为bool的情况。
基于范围的循环泛化
- 似乎主要支持与begin迭代器类型不同的哨兵或结束迭代器,这有助于处理以空结束的循环等。
null
过对齐数据的动态内存分配
保证副本删除
- 终于!
- 不是在所有情况下,但会将“只是创建一些东西”的语法(称为elision)与“真正elision”区分开来。
null
- 我认为这是在说“实现可能不会永远停止线程”?
U8“U”,U8“T”,U8“F”,U8“8”
字符文字(字符串已存在)
类型系统中的“NoExcept”
null
使用继承聚合初始化。
std::launder
、类型双关语等
>
std::variant
null
null
null
std::string_view
std::string
类似于对字符数组或子字符串的引用
- 永远不要再使用
字符串常量&
。还可以使解析速度提高数亿倍。
“Hello World”SV
- constexpr
char_traits
std::byte
超出了它们所能咀嚼的范围。
null
null
null
is_invocable
,is_invocable_r
,invoke_result
- http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0077r2.html
- http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2017/P0604R0.html
- 不推荐使用
result_of
is_invocable
是“是否可以使用args...
调用foo
并获得与r
兼容的内容”,其中r=void
是默认值。
invoke_result
是std::result_of_t
但显然不太容易混淆?
>
[class.path]
[class.fileSystem.error]
[class.file_status]
[class.directory_entry]
reduce
transform_reduce
exclusive_scan
null
原子
::is_always_lockfree
scoped_lock
- 在一次锁定多个互斥体时,可省去一些
std::lock
的麻烦。
null
硬件_*_Interference_Size
[func.searchers]
和[alg.search]
一种搜索算法和技术
[pmr]
- 多态分配器,如用于分配器的
std::function
- 和一些标准内存资源。
- http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0358r1.html
null
- 在容器之间便宜地移动节点。
- 以低廉的价格合并整个容器。
字符串的非常量.data()
。
非成员std::size
,std::empty
,std::data
- 如
std::begin
/end
容器中最小的不完整类型支持
连续迭代器“概念”
null
null
>
C++17库基于C11而不是C99
为将来的标准库保留标准[0-9]+
destroy(_at_n)
,uninitialized_move(_n)
,uninitialized_value_construct(_n)
,uninitialized_default_construct(_n)
- 工具代码已在大多数
std
公开的实现中
- 科学家可能会喜欢它们
std::clamp(a,b,c)==std::max(b,std::min(a,c))
大致
null
null
null
- http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2016/p0358r1.html
- 交换
- is_aggregate
- has_unique_object_representations
- 某些C库,
memory_order_consument
result_of
,替换为invoke_result
shared_ptr::unique
,它不是非常安全的线程
从SD-6特征测试列表中掠夺的其他条目。
Clang的特征列表和库特征列表是下一个被掠夺的。这似乎不太可靠,因为它是C++1z,而不是C++17。
这些幻灯片在其他地方缺少了一些功能。
null
P0512R0(模板参数推演调整)
P0490R0(结构化绑定调整)
P0513R0(更改为std::hash
)
P0497R0(共享ptr调整)
P0508R0(结构化绑定节点句柄)
P0521R0(共享指针使用计数和唯一更改?)
null
null
本文向大家介绍请问C++11有哪些新特性?相关面试题,主要包含被问及请问C++11有哪些新特性?时的应答技巧和注意事项,需要的朋友参考一下 C++11 最常用的新特性如下: auto关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导 nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时
本文向大家介绍React16新特性有哪些?相关面试题,主要包含被问及React16新特性有哪些?时的应答技巧和注意事项,需要的朋友参考一下 1.使用Error Boundary处理错误组件 2.render支持2种新的返回类型(数组、字符串) 3.使用createProtal 将组件渲染到当前组件树之外 4.自定义DOM属性 :把不会识别的属性传递给DOM 5.setState传入null时不会再
本文向大家介绍CSS3新特性有哪些?相关面试题,主要包含被问及CSS3新特性有哪些?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 开放题。CSS3边框如border-radius,box-shadow等;CSS3背景如background-size,background-origin等;CSS3 2D,3D转换如transform等;CSS3动画如animation等。 参考https:
本文向大家介绍css3有哪些新特性?相关面试题,主要包含被问及css3有哪些新特性?时的应答技巧和注意事项,需要的朋友参考一下 1)CSS3 实现圆角(border-radius:8px;), 2)阴影(box-shadow:10px), 3)对文字加特效(text-shadow), 4)线性渐变(gradient), 5)旋转(transform), 6)transform:rotate(9de
本文向大家介绍HTML5有哪些的新特性?相关面试题,主要包含被问及HTML5有哪些的新特性?时的应答技巧和注意事项,需要的朋友参考一下 HTML5中最有趣的新特性: 二维画图中的 元素 媒体播放的 和 元素 支持本地存储 新的内容特定元素,如
本文向大家介绍CSS3有哪些新增的特性?相关面试题,主要包含被问及CSS3有哪些新增的特性?时的应答技巧和注意事项,需要的朋友参考一下 圆角: border-radius 盒子阴影: box-shadow 文字阴影: text-shadow 2d,3d转换: transform 动画: Keyframes规则 盒子模型: display:flex 媒体查询: meta