gpt4 book ai didi

c++ - 重载赋值运算符,rhs是函数调用

转载 作者:行者123 更新时间:2023-11-30 05:12:52 25 4
gpt4 key购买 nike

我重载了一些类 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++,没有临时对象怎么会出问题呢?

最佳答案

只需仔细查看您对 operator= 的实现:

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

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

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

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

哪个应该有效。

关于c++ - 重载赋值运算符,rhs是函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44305377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com