重载赋值运算符,rhs是一个函数调用

时间:2017-06-01 10:42:04

标签: c++ class oop operators overloading

我为某个类c1重载赋值运算符,并且我还重载了加法运算符,以添加类c1和c2。当我按如下方式使用它们时:

// signatures of the overloaded operators:
c2 c1::operator+(c2 & obj_c2);
c1& c1::operator=(c2& obj_c2);


// use them like this:
c1 obj1;
c2 ojb2;
obj1=obj1+ojb2;

这会导致失败。但是,如果我使用临时对象,它可以工作:

c1 obj1;
c2 ojb2, temp;
temp=obj1+ojb2;
obj1=temp;

我使用的编译器是g ++,如何在没有临时对象的情况下出现问题?

1 个答案:

答案 0 :(得分:1)

仔细查看 operator = 的实现:

c1& c1::operator=(c2& obj_c2);

此处 operator = 通过 reference 接受其参数。但是引用不能绑定到临时对象。在第二个示例中,引用绑定到 temp ,这不是临时的,因此它可以工作。

要解决此问题,请将 operator = 更改为:

c1& c1::operator=(const c2& obj_c2);

应该有用。