加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 04:57:12 所属栏目:百科 来源:网络整理
导读:在这个代码片段中,实际调用了哪个构造函数? Vector v = getVector(); Vector有复制构造函数,默认构造函数和赋值运算符: class Vector {public: ... Vector(); Vector(const Vector other); Vector operator=(const Vector other);}; getVector按值返回. Ve
在这个代码片段中,实际调用了哪个构造函数?
Vector v = getVector();

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

class Vector {
public:
    ...
    Vector();
    Vector(const Vector& other);
    Vector& operator=(const Vector& other);
};

getVector按值返回.

Vector getVector();

代码使用C 03标准.

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读