我为某个类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 ++,如何在没有临时对象的情况下出现问题?
答案 0 :(得分:1)
仔细查看 operator = 的实现:
c1& c1::operator=(c2& obj_c2);
此处 operator = 通过 reference 接受其参数。但是引用不能绑定到临时对象。在第二个示例中,引用绑定到 temp ,这不是临时的,因此它可以工作。
要解决此问题,请将 operator = 更改为:
c1& c1::operator=(const c2& obj_c2);
应该有用。