使用C++构造函数的不同方法

Bon*_*Bon 3 c++ constructor

A a1(5)之间有什么区别; 和A a2 = A(5)?两个作品,但我真的想知道它们之间的区别,因为我在我的一个项目中使用了方法2,我遇到了一个错误,在我改为方法1后修复了.提前谢谢!

class A {
public:
    int val;
    A() : val(0) {}
    A(int newVal) : val(newVal) {}
};

int main()
{
    A a1(5);  // method 1
    A a2 = A(5); // method 2
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 7

A a1(5);  // method 1
A a2 = A(5); // method 2
Run Code Online (Sandbox Code Playgroud)

第一个称为直接初始化,第二个称为复制初始化.

如果您使复制构造函数不可访问或/并且未将其定义为:第二个将不编译:

class A {
public:
    int val;
    A() : val(0) {}
    A(int newVal) : val(newVal) {}
private:
    A(A const&);  //the second one will not compile
};
Run Code Online (Sandbox Code Playgroud)

现在第二个不会编译.请注意,它不会在两种情况下编译:

  • 如果定义了复制构造函数,但是不可访问(或者是privateprotected).
  • 如果声明了copy-constructor,但未定义.