0

我对cppref语句感到困惑:

[...] 如果使用了转换构造函数,则转换结果是纯右值表达式(自 C++17 起),然后用于直接初始化对象。 最后一步通常被优化,转换的结果直接在为目标对象分配的内存中构造,但是即使不使用适当的构造函数(移动或复制)也需要可访问。(直到 C++17)

std::atomic_int atom = 1;我在 gcc 8.0.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 中访问适当的构造函数(移动或复制)?

4

1 回答 1

1

在 C++17中强制复制省略的情况下,永远不会使用这些构造函数。在这种情况下,没有什么可以检查的。

在早期版本中,省略只是可选的,需要访问检查才能在编译器之间获得一致的结果。对于省略不是强制性的情况,仍然会在 C++17 中发生。

于 2018-02-17T04:45:41.823 回答