重用运算符函数返回的对象
reusing the returned object from operator function
考虑以下操作员过载场景
class integer
{
public:
int a;
integer()
{
a = 0;
}
friend integer operator+(integer &a ,int b);
};
integer operator+(integer &a,int b)
{
a.a = a.a + b;
return a;
}
int main()
{
integer obj;
integer obj2;
obj+2; //Line 1. this works.
operator+
函数返回一个integer
类型的对象。那么,为什么我不能执行像这样的函数调用呢
(obj+2)+3; //no match for 'operator+' (operand types are 'integer' and 'int')
当工作时
obj2 = obj+2;
obj2+3;
integer &a
表示a
只能引用左值。但obj+2
不是左值。
要解决此问题,您应该将参数更改为integer a
,即:
- 可以绑定到右值
- 使您的函数实际执行
operator+
的函数
如果您的第一个参数是integer&
,则表明您正在尝试编写operator+=
。对于该函数,解决方案是还返回integer&
,因此obj+=2
是一个左值。
作为M.M答案的必然结果(您应该接受),这里是固定代码:
class integer
{
public:
int a;
integer()
{
a = 0;
}
friend integer operator+(integer a ,int b);
};
// fix: arg 1 passed by value
integer operator+(integer a,int b)
{
a.a = a.a + b;
return a;
}
int main()
{
integer obj;
integer obj2;
obj+2;
(obj+2)+3;
}
相关文章:
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- 从我的对象返回静态数组
- 将unique_ptr作为<Object>unique_ptr<常量对象返回>
- 从右值对象返回成员
- 视觉对象 返回 C++ 中的双精度值
- 为什么类型为 sf::Text 的对象返回不同的 getPosition().y 和 getLocalBounds().
- std::min_element 从类对象返回意外结果
- C++无效的对象返回语义
- const引用是否延长临时对象返回的临时对象的寿命
- 将 NULL 作为对象返回时未收到任何警告
- 如何在 C# 中从 com 对象返回数组(double[])
- 从重载运算符返回引用,并使用临时对象返回表达式
- Cin 对象返回值 c++
- 将变量作为类对象返回
- 使用可更改对象返回只读的最佳方法是什么
- 如何在Cython中从另一个包装对象返回包装的c++对象
- 当对象返回时,c++动态数组被清除
- 从带有动态字段的函数、对象返回
- 从堆栈上的匿名对象返回对*this的引用