从操作员函数重用返回的对象

时间:2016-04-14 05:06:56

标签: c++ operator-overloading

考虑以下运算符重载方案

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;

2 个答案:

答案 0 :(得分:3)

integer &a表示a只能引用左值。但obj+2不是左值。

要解决此问题,您应将参数更改为integer a,其中:

  • 可以绑定到rvalues
  • 使您的函数实际执行operator+的功能。

如果您的第一个参数是integer&,则建议您尝试编写operator+=。对于该函数,解决方案是返回integer&,以便obj+=2是左值。

答案 1 :(得分: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;
}