你在正确的部分,但忽略了一些关键的子弹。
[dcl.fct.def.default]/1
:
形式的函数定义:
...
被称为
明确默认
明确违约的应
-
具有相同的声明函数类型
(除了可能不同的ref限定符和副本
构造函数或复制赋值运算符,
)
就好像它是含蓄地声明的一样
和
[class.copy.ctor]/7
类型
X::X(const X&)
如果类类型M(或数组)的每个潜在构造子对象
其中)有一个复制构造函数,其第一个参数的类型为const
119
否则,隐式声明的副本
构造函数将具有表单
X::X(X&)
...
119)这意味着隐式声明的复制构造函数的引用参数不能绑定到易失性左值;
struct A {
A(const A&) = default;
};
struct B {
B(B&) = default;
};
当标准说
A(const volatile A&)
是复制构造函数。这意味着
用户提供
带有这样一个参数的c'tor可以是类的副本c'tor。