运算符 + 过载错误.无法返回对对象的引用

operator+ overload error. Unable to return reference to object

本文关键字:返回 对象 引用 错误 运算符      更新时间:2023-10-16

有这样的类:

class MyClass
{
private:
    double value;
public:
    MyClass()
    {
        this->value = 0;
    }
    MyClass(double value)
    {
        this->value = value;
    }
    MyClass& operator + (MyClass & outerObj);
};

为什么这种重载有效:

MyClass& MyClass::operator + (MyClass & outerObj)
{
    MyClass retObject(this->value + outerObj.value);
    return retObject;
}

但这个不是吗?

MyClass& MyClass::operator + (MyClass & outerObj)
{
    return MyClass(this->value + outerObj.value);
}

VC++ 发出警告:

我的类:

:我的类(双倍值)

+3 过载

非常量参考的初始值必须是左值

我不明白问题是什么。毕竟,它返回的内容基本上相同。

第一个代码片段的问题,您正在尝试返回绑定到本地对象的引用。局部变量在退出函数时将被销毁,然后返回的引用总是悬空的。

第二个代码片段的问题,您正在尝试将一个临时对象绑定到非常量 (non-const) 的左值引用,这是格式不正确的。

您应该将operator+从按引用返回更改为按值返回,这将使返回本地对象或临时对象都可以正常工作,并使您远离上述麻烦。

MyClass MyClass::operator + (const MyClass & outerObj) const {
    ...
}