我很难绕过以下内容(特别是方案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)