重新分配值在 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 一个指向分配在堆上的新值的指针...并忽略该结果。