默认构造函数调用与复制构造函数调用

时间:2017-05-11 08:50:25

标签: c++ constructor copy

如果我创建三个这样的对象:

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; }
};

1 个答案:

答案 0 :(得分:0)

根据copy elision优化复制构造函数调用;这是自C ++ 17以来的保证。

  

在初始化中,如果初始化表达式是prvalue且源类型的cv-nonqualified版本与目标类相同,则初始化表达式用于初始化目标对象