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)
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)
现在第二个不会编译.请注意,它不会在两种情况下编译:
private或protected).