前端之家收集整理的这篇文章主要介绍了
c – 在这里调用哪个构造函数?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在这个
代码片段中,实际
调用了哪个构造
函数?
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中的物理对象相同.
原文链接:https://www.f2er.com/c/120228.html