C 中副本初始化要求的放松17

Relaxation of copy initialization requirements in C++17

本文关键字:副本 初始化      更新时间:2023-10-16

我对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中仍然发生。