C 中副本初始化要求的放松17
Relaxation of copy initialization requirements in C++17
我对cppref语句感到困惑:
[...]转换的结果,即 prvalue表达式(因为 C 17(如果使用了转换构造器,则使用 直接点燃对象。 最后一步通常是优化的,是 转换直接在分配的内存中构造 目标对象,但是适当的构造函数(移动或复制(是 即使没有使用,也必须可以访问。(直到C 17(
我在GCC 8.0.1上测试了std::atomic_int atom = 1;
,并使用C 17编译,但使用C 14失败,并带有以下错误:
error: use of deleted function 'std::atomic<int>::atomic(const std::atomic<int>&)'
std::atomic_int atom = 1;
^
这是否意味着不再需要在C 17?
在C 17中的强制性的情况下,这些构造函数从未使用。在这种情况下,没有什么可检查的。
在较早的版本中,省略仅是可选的,需要进行访问检查以在编译器之间获得一致的结果。对于不强制性省略的情况,在C 17中仍然发生。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 副本初始化的默认模板参数推导
- 为什么 std::string s = "123" 当不涉及副本时被视为复制初始化?
- C 标准:通过复制返回以初始化无RVO的参考:是否有任何副本
- 为什么我的类的副本初始化不适用于使用字符串文字的string_view?
- C 中副本初始化要求的放松17
- 是否可以编写便于副本初始化的显式构造函数
- 为什么初始化列表会导致2个数据副本,而不仅仅是单个副本将其传递给函数
- 构造函数初始化列表中的 C 结构副本C++
- 初始化引用时何时以及为何获得副本
- 错误的数组初始化与赋值副本构造函数初始化
- C++-初始化由不同线程拥有的对象的两个副本
- 在使用auto时初始化结构会导致VS 2013中的副本
- 从计数和元素值初始化 std::vector 与副本
- 带有单个副本的初始化std::字符串
- 在显式初始化期间尝试创建函数副本时出错
- 用函数返回值初始化std::string,是否有副本
- 通过值传递的CRTP模式的未初始化副本
- 用ref. parameter初始化ref. field:是一个副本
- 为什么在初始化列表中不需要创建额外的副本就可以对数据进行赋值