有课程:
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重载
非常量引用的初始值必须为左值
我不明白问题是什么。毕竟,它返回的本质是相同的。
答案 0 :(得分:3)
第一个代码段的问题,您正在尝试返回绑定到本地对象的引用。退出函数后,局部变量将被销毁,然后返回的引用将始终悬空。
第二个代码段的问题,您正在尝试将临时对象绑定到对格式不正确的非const的左值引用。
您应该将operator+
从按引用返回更改为按值返回,这将使返回的本地对象或临时对象都可以正常工作,并使您远离上述麻烦。例如
MyClass MyClass::operator + (const MyClass & outerObj) const {
...
}