如果我创建三个这样的对象:
A myA; // line 1
A myA2 = A(); // line 2
A myA3 = myA; // line 3
我想在第二行调用了复制构造函数。但是,如果我尝试这个(Visual Studio)第1行和第2行只调用默认构造函数。然而,第3行调用复制构造函数。因此,第1行和第2行之间似乎没有区别。两者都调用默认的construcor。那么为什么我有不同的语法?
顺便说一下,我的测试类A的格式为:
class A {
public:
A() { cout << "default ctor is called..." << endl; }
A(const A &obj) { cout << "copy ctor is called..." << endl; }
};
答案 0 :(得分:0)
根据copy elision优化复制构造函数调用;这是自C ++ 17以来的保证。
在初始化中,如果初始化表达式是prvalue且源类型的cv-nonqualified版本与目标类相同,则初始化表达式用于初始化目标对象