首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载赋值操作符,rhs是一个函数调用。

重载赋值操作符,rhs是一个函数调用。
EN

Stack Overflow用户
提问于 2017-06-01 10:42:04
回答 1查看 173关注 0票数 1

我为某些类c1重载赋值操作符,也重载加法运算符,以添加类c1和c2。当我按以下方式使用它们时:

代码语言:javascript
复制
// 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;

这会编译成失败。但是,如果我使用一个临时对象,它会工作:

代码语言:javascript
复制
c1 obj1;
c2 ojb2, temp;
temp=obj1+ojb2;
obj1=temp;

我使用的编译器是g++,如果没有临时对象,这怎么会是一个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 10:55:26

只需仔细查看operator=的实现

代码语言:javascript
复制
c1& c1::operator=(c2& obj_c2);

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

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

代码语言:javascript
复制
c1& c1::operator=(const c2& obj_c2);

应该能行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44305377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档