C++ 重载赋值运算符,rhs是一个函数调用
对于某些类c1,我重载赋值运算符,对于类c1和c2的加法,我也重载加法运算符。当我按如下方式使用它们时:C++ 重载赋值运算符,rhs是一个函数调用,c++,class,oop,operators,overloading,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; 这会导致失败。但如果我使用临时对象,它会
// 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++,如果没有临时对象,这怎么会是一个问题呢?请仔细看看运算符=: 这里operator=通过引用接受其参数。但是引用不能绑定到临时对象。在第二个示例中,引用绑定到temp,temp不是临时的,因此它可以工作 要解决此问题,请将运算符=更改为:
这应该有效。要么让加法运算符返回引用,要么添加另一个赋值运算符。我建议您检查。请注意赋值运算符的参数是如何引用
常量的?谢谢,它可以工作!这意味着临时对象可以被常量引用,尽管它不能被引用。
c1& c1::operator=(c2& obj_c2);
c1& c1::operator=(const c2& obj_c2);