假设我有以下(无效)代码:
struct A {
A(A) {};
};
MSVC给了我:
error C2652: 'A' : illegal copy constructor: first parameter must not be a 'A'
为什么编译器会将此检测为复制构造函数,而不是常规构造函数?
C ++标准的第12.8.2章说:
类的非模板构造函数 X 如果它的第一个参数是类型,则是一个复制构造函数 的 X&安培; , const X& , 易变X& 要么 const volatile X&
我希望编译器将上述方法检测为常规构造函数,就像
一样struct A {
A(B) {};
};
而B是另一个类。
这种行为在哪里定义?
答案 0 :(得分:5)
N4140 https://www.tinymce.com/docs/advanced/events/
如果类
X
的构造函数的第一个参数是类型(可选择cv-qualified)X
并且没有其他参数或者所有其他参数,那么它的构造函数声明是错误的有默认参数。