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

ipk*_*iss 2 c++ assignment-operator

我有以下代码:

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
     }
};
Run Code Online (Sandbox Code Playgroud)

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

Sales_item s;
Sales_item s1 = s;
Run Code Online (Sandbox Code Playgroud)

Line 1没有执行.如何在重载的赋值中"看到"代码才能执行?例如,可能有复杂的代码,我想调试?我试图在第1行设置断点,但程序没有跳到该断点.

为何Line 2回归*this?我试图改变void并获得相同的结果.有什么不同?

Luc*_*ore 5

你正在初始化s1,而不是分配给它.

Sales_item s1 = s;
Run Code Online (Sandbox Code Playgroud)

调用编译器生成的复制构造函数.它相当于:

Sales_item s1(s);
Run Code Online (Sandbox Code Playgroud)

你需要:

Sales_item s1;
s1 = s;
Run Code Online (Sandbox Code Playgroud)

为何Line 2回归*this? - 这是实现赋值运算符的惯用方法,我建议你坚持下去.它便于方法和操作链接.