运算符 + 过载错误.无法返回对对象的引用
operator+ overload error. Unable to return reference to object
有这样的类:
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 {
...
}
相关文章:
- 如何返回对象C++的数组
- 如何使用std::min和std::less返回对象
- 如何通过引用返回对象
- 如何安全地从 DLL 调用返回对象
- 如何在不销毁对象的情况下返回对象列表
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 使用返回对象的函数处理错误
- 何时返回指针与返回对象的一般经验法则?
- 如何使用运算符+重载函数正确返回对象?
- C++,class,一个返回对象的函数
- 运算符的返回对象 = C++ 中的重载
- 从队列返回对象的最快方法,但前提是队列有它
- 如何使用条件表达式返回对象指针?
- 使用构造函数从函数返回对象
- 隐式转换函数的返回对象时是否会影响性能?
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 按值和堆栈大小限制返回对象
- 我应该如何从函数返回对象?
- c++:何时传递指针与返回对象
- 返回对象会丢失属性