如何知道重载赋值运算符中的代码是否执行?

我有以下代码:如何知道重载赋值运算符中的代码是否执行?

class Sales_item { 

public:

int ii;

Sales_item& operator=(const Sales_item &item)

{

cout << "Inside assignment\n"; // Line 1

ii = item.ii;

return *this; // Line 2

}

};

然后,我所做的: (只是一个例子)

Sales_item s; 

Sales_item s1 = s;

Line 1没有执行。我怎样才能“看到”重载任务内的代码才能执行?例如,可能有复杂的代码,我想调试?我试图在第1行设置断点,但程序没有跳到那个断点。

为什么Line 2返回*this?我试图更改为void并得到了相同的结果。有什么不同?

回答:

您正在初始化s1,未分配给它。

Sales_item s1 = s; 

调用编译器生成的拷贝构造函数。它等效于:

Sales_item s1(s); 

您需要:

Sales_item s1; 

s1 = s;

为什么Line 2回报*this? - 这是实施赋值操作符的惯用方式,我建议你坚持下去。它有助于方法和操作链接。

回答:

关于问题2:您返回*这是为了启用链式分配,如s1 = s2 = s3 = ...

以上是 如何知道重载赋值运算符中的代码是否执行? 的全部内容, 来源链接: utcz.com/qa/262609.html

回到顶部