如何知道重载赋值运算符中的代码是否执行?
我有以下代码:如何知道重载赋值运算符中的代码是否执行?
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