0

可能重复:
为什么在这种情况下不调用复制构造函数?
什么是复制省略,它如何优化复制和交换的习惯用法?

我一直在尝试理解 ctor 和运算符重载。

#include <iostream>
using namespace std;

class number {
   int n;
 public:
   number(int i=0):n(i)     {       cout<<"in ctor"<<endl;    }
    ~number()               {       cout<<"in dtor"<<endl;    }
   number(const number& obj):n(obj.n)   {
                                    cout<<"in copy ctor"<<endl;   }
   number operator+(const number & obj)  {
                                     return number(n+obj.n);   }

    number operator=(const number &rhs)  {
               n = rhs.n;        cout<<"in assignemnt opr"<<endl;    }
   void disp() {cout<<n<<endl;}
};

int main()
{
        number one(1),two(2);
        number three =one + two; //was expecting copy ctor being called here
        three.disp();
}

当我运行上面的代码时,我得到了以下输出

在此处输入图像描述

我知道在重载运算符中调用了三个构造函数onetwo对象un-named+我无法理解three是如何构造的。我认为应该调用复制ctor。但似乎不是。有人可以解释一下吗。谢谢。

4

0 回答 0