【问题标题】:overload assignment operator, rhs is a function call重载赋值运算符,rhs是函数调用
【发布时间】:2017-11-02 11:23:51
【问题描述】:

我为某些类 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++,没有临时对象怎么会出问题?

【问题讨论】:

标签: c++ class oop operators overloading


【解决方案1】:

仔细看看你对operator=的实现:

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

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

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

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

应该可以。

【讨论】:

  • 谢谢,它有效!这意味着临时对象可以被 const 引用,尽管它不能被引用。
猜你喜欢
  • 2014-04-18
  • 2013-03-26
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2014-10-12
  • 2011-12-12
相关资源
最近更新 更多