Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 操作员+;过载错误。无法返回对对象的引用_C++_Oop_Reference_Operator Overloading - Fatal编程技术网

C++ 操作员+;过载错误。无法返回对对象的引用

C++ 操作员+;过载错误。无法返回对对象的引用,c++,oop,reference,operator-overloading,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); }; 为什么超负荷工作

这是一节课:

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

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


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

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

第二个代码段的问题是,您试图将一个临时对象绑定到非常量的左值引用,这是一个格式错误的对象

您应该将
操作符+
从按引用返回改为按值返回,这将使返回的本地对象或临时对象都能正常工作,并避免上述问题。e、 g

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

通常,将
运算符+()
本身设置为
常量也是一个好主意。i、 e.
MyClass MyClass::operator+(常量MyClass和outerObj)常量
。表达式
a+b
能够修改
a
很少是个好主意。