重新分配值在 operator = 重载中不起作用
reassign value not work in operator = overloading
MWE 是
#include <iostream>
using namespace std;
class N {
public:
float x;
N() { x = 0.0; }
N(float a) { x = a; }
//N(N &n) { x = n.x; }
N &operator=(float f) { cout << "########";return *new N(f); }
};
int main() {
N a;
a = 3.0;
cout << a.x;
return 0;
}
我期望的是:它打印了 3,但实际上打印了 0。看起来值没有改变。
那我改成
x = f; return *this;
成功了,为什么?
当然不会变。您不会在赋值运算符中更改它。相反,您 return 一个指向分配在堆上的新值的指针...并忽略该结果。
MWE 是
#include <iostream>
using namespace std;
class N {
public:
float x;
N() { x = 0.0; }
N(float a) { x = a; }
//N(N &n) { x = n.x; }
N &operator=(float f) { cout << "########";return *new N(f); }
};
int main() {
N a;
a = 3.0;
cout << a.x;
return 0;
}
我期望的是:它打印了 3,但实际上打印了 0。看起来值没有改变。
那我改成
x = f; return *this;
成功了,为什么?
当然不会变。您不会在赋值运算符中更改它。相反,您 return 一个指向分配在堆上的新值的指针...并忽略该结果。