Dic*_*how 2 c++ copy-constructor copy-initialization
这是我最初所做的。
class A
{ public:
A() { std::cout << "\ndefault constructor"; }
A(const A&) { std::cout << "\ncopy constructor"; }
A(int) { std::cout << "\nconversion constructor"; }
};
A a0; // print default constructor
A a1(a0); // print copy constructor note : direct initialization
A a2 = a0; // print copy constructor note : copy initialization
A a3(123); // print conversion constructor note : direct initialization
A a4 = 123; // print conversion constructor note : copy initialization (create a temp object from int)
Run Code Online (Sandbox Code Playgroud)
但是,如果类 A 稍微修改如下(删除复制构造函数中的 const),为什么最后一行会出现编译错误?谢谢你
class A
{ public:
A() { std::cout << "\ndefault constructor"; }
A(A&) { std::cout << "\ncopy constructor"; }
A(int) { std::cout << "\nconversion constructor"; }
};
A a0; // print default constructor
A a1(a0); // print copy constructor note : direct initialization
A a2 = a0; // print copy constructor note : copy initialization
A a3(123); // print conversion constructor note : direct initialization
//A a4 = 123; // compile error
Run Code Online (Sandbox Code Playgroud)
A a4 = 123;
Run Code Online (Sandbox Code Playgroud)
相当于
A a4 = A(123); // The RHS is a temporary A object.
Run Code Online (Sandbox Code Playgroud)
这适用于第一种情况,因为有一个构造函数将 aA const&作为参数类型。
如果参数类型是A&. 当参数类型为 时A const&,可以使用临时对象,而不是时A&。
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |