C ++构造函数的值

时间:2016-12-16 12:52:03

标签: c++ language-lawyer

假设我有以下(无效)代码:

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是另一个类。

这种行为在哪里定义?

1 个答案:

答案 0 :(得分:5)

N4140 https://www.tinymce.com/docs/advanced/events/

  

如果类X的构造函数的第一个参数是类型(可选择cv-qualified)X并且没有其他参数或者所有其他参数,那么它的构造函数声明是错误的有默认参数。