【问题标题】:operator+ overload error. Unable to return reference to object运算符+重载错误。无法返回对对象的引用
【发布时间】:2019-01-20 08:47:03
【问题描述】:

有课:

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 重载

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

我无法理解问题所在。毕竟,它返回的内容基本相同。

【问题讨论】:

    标签: c++ oop reference operator-overloading


    【解决方案1】:

    第一个代码 sn-p 的问题,你试图返回一个绑定到本地对象的引用。退出函数时局部变量会被销毁,返回的引用总是悬空的。

    第二个代码 sn-p 的问题,你试图将一个临时对象绑定到非 const 的左值引用,这是格式错误的。

    你应该把operator+从return-by-reference改为return-by-value,这样可以让返回本地对象或临时对象都正常工作,让你远离上述烦恼。例如

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

    【讨论】:

    • 通常将operator+() 本身设置为const 也是一个好主意。即MyClass MyClass::operator + (const MyClass & outerObj) const。表达式 a + b 能够修改 a 很少是一个好主意。
    猜你喜欢
    • 2014-03-14
    • 2020-08-26
    • 2011-09-16
    • 2020-07-09
    • 2011-01-13
    • 1970-01-01
    • 2012-04-23
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多