我为某些类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++,如果没有临时对象,这怎么会是一个问题呢?
发布于 2017-06-01 10:55:26
只需仔细查看operator=的实现
c1& c1::operator=(c2& obj_c2);在这里,operator=通过引用来接受它的论点。但是引用不能绑定到临时对象。在第二个例子中,引用绑定到temp,这不是临时的,所以它可以工作。
要解决这个问题,请将operator=更改为:
c1& c1::operator=(const c2& obj_c2);应该能行的。
https://stackoverflow.com/questions/44305377
复制相似问题