我找不到标准中指出禁止使用volatile&
or或const volatile&
参数显式默认copy-constructor和copy-assignment的地方,如下所示:
struct A{
A(const volatile A&) =default; // fails to compile on (all) compilers
};
在[dcl.fct.def.default]中没有这样的限制,而[class.copy]指定A(const volatile A&)
是副本构造函数。
注意:我只是在标准文本中寻找指定此行为的位置。
您位于正确的部分,但忽略了一些关键的项目符号。
形式的函数定义:
...
被称为显式默认定义。明确默认的功能应
- 具有相同的声明函数类型(除了可能不同的ref限定符,以及对于复制构造函数或复制赋值运算符而言,参数类型可以是“对非常量T的引用”,其中T是成员函数的class),就好像它已隐式声明一样,并且
X类的隐式声明的副本构造函数将具有以下形式:
X::X(const X&)
如果类类型M(或其数组)的每个可能构造的子对象都有一个副本构造函数,其第一个参数的类型为const M&或const volatile M&。119否则,隐式声明的副本构造函数将具有以下形式:
X::X(X&)
...
119)这意味着隐式声明的副本构造函数的引用参数无法绑定到易失性左值;
总结以上内容后,您可以使用以下两个方法来明确默认副本的默认值:
struct A {
A(const A&) = default;
};
struct B {
B(B&) = default;
};
当标准说的A(const volatile A&)
是复制构造函数时。这意味着具有此类参数的用户提供的c'tor可以是类copy c'tor。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句