小编boj*_*ski的帖子

C++运算符重载和复制构造函数

我很难绕过以下内容(特别是方案b):(假设我已经定义了赋值运算符,加法运算符和复制构造函数,只是为了输出它们被调用的事实)

场景一:

Simple a;
Simple b;
Simple c = a + b;

    The output is as follows:
    Simple constructor called
    Simple constructor called
    Simple add operator call
    Simple constructor called
    copy constructor called
Run Code Online (Sandbox Code Playgroud)

- 这一切都很好,花花公子

方案b(我无法理解的行为):

Simple d;
Simple e;
Simple f;
f = d + e;

    Simple constructor called
    Simple constructor called
    Simple constructor called
    Simple add operator called
    Simple constructor called
    copy constructor called
    assignment operator called
Run Code Online (Sandbox Code Playgroud)

我的问题是在方案b中,为什么在赋值运算符之前调用复制构造函数是正确的?根据我的理解,只能在未初始化的对象上调用复制构造函数.但是,在这种情况下,对象f已在添加之前的行中初始化.

非常感谢您的解释.

抱歉没有立即发布源代码(并且缺少缩进 - 我在复制到textarea时遇到问题).这里的一切都很简单.我正在使用Visual Studio 2005.不幸的是,我还不熟悉它的工作原理,因此我无法指定传递给编译器的优化参数.

class Simple
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading copy-constructor

7
推荐指数
1
解决办法
2925
查看次数