10

在写这个答案时,我意识到我对我的结论并不像我通常在点击之前所确保的那样有信心Post Your Answer

我可以找到一些相当有说服力的引文来说明数据成员的琐碎可复制性volatile要么是实现定义的,要么是完全不允许的:

但我无法在标准1本身中支持这一点。特别“令人担忧”的是,在实际标准的最终措辞中,没有迹象表明提议的措辞与 n3159 问题列表相比有所改变。

那么,什么给了?volatile数据成员是否可以轻松复制?


1   C++11

4

2 回答 2

2

我看到以下“可简单复制”的定义(C++11 §3.9,第 9 段):

...标量类型、可平凡复制的类类型、此类类型的数组以及这些类型的cv 限定版本统称为可平凡复制类型...。

cv-qualified根据定义包括const 和/或 volatile(§3.9.3)。因此volatile,如果非限定类型是可平凡复制的(标量或可平凡复制的类类型,或其数组),那么值似乎是显式可平凡复制的。

于 2012-11-17T06:00:16.367 回答
1

缺陷报告CWG496CWG2094改变了答案。后者 DR 恢复前者。

现在,对于 volatile 非静态数据成员,

  • 但是,如果成员是标量类型或可能是其中的多维数组,则不会使该类不可复制
  • 如果 的成员是类类型或可能是其中的多维数组,则包含类的隐式声明的复制/移动函数都将被删除,这使得类不可复制(自CWG1734起)。
于 2022-02-17T13:08:54.057 回答