在这里调用哪个构造函数?

Sig*_*erm 7 c++ c++03

在这个代码片段中,实际调用了哪个构造函数?

Vector v = getVector(); 
Run Code Online (Sandbox Code Playgroud)

Vector有复制构造函数,默认构造函数和赋值运算符:

class Vector {
public:
    ...
    Vector();
    Vector(const Vector& other);
    Vector& operator=(const Vector& other);
};
Run Code Online (Sandbox Code Playgroud)

getVector按值返回.

Vector getVector();
Run Code Online (Sandbox Code Playgroud)

代码使用C++ 03标准.

代码片段看起来应该调用默认构造函数然后调用赋值运算符,但我怀疑这个声明是使用复制构造函数的另一种形式.哪个是对的?

Ben*_*ley 8

=出现在初始化中时,它会调用复制构造函数.一般形式与直接调用复制构造函数不完全相同.在语句中T a = expr;,如果expr的类型为T,则会调用复制构造函数.如果expr不是T类型,那么首先进行隐式转换,如果可能的话,然后使用它作为参数调用复制构造函数.如果无法进行隐式转换,则代码格式不正确.

根据getVector()结构的方式,可以优化副本,并且在函数内创建的对象是存储在v中的相同物理对象.