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

时间:2019-01-20 08:47:03

标签: c++ oop reference operator-overloading

有课程:

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 ++发出警告:

  

MyClass :: MyClass(双值)

     

+3重载

     

非常量引用的初始值必须为左值

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

1 个答案:

答案 0 :(得分:3)

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

第二个代码段的问题,您正在尝试将临时对象绑定到对格式不正确的非const的左值引用。

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

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