读书人

【基础有关问题】有关重载操作符+的有

发布时间: 2012-03-24 14:00:46 作者: rapoo

【基础问题求助】有关重载操作符+的问题
最近写一个大整数类,里面重载操+作符,我们一般是这么做的:
BigInt operator+(const BigInt &lval, const BigInt& rval)
{
BigInt temp(lval);
temp += rval;
return temp;
}
没有任何问题,且可以连加;

自己随便改改成这样:
BigInt operator+(BigInt &lval, const BigInt& rval)
{
lval += rval;
return lval;
}
做一次加法可以,但连加就不行,比如b1,b2,b3都是BigInt, b1+b2+b3就通不过编译,b1+b2却可以,为什么呢?

然后改成这样:
BigInt operator+(BigInt lval, const BigInt& rval)
{
lval += rval;
return lval;
}
也没有任何问题(效率低点),且可以连加,这又是为什么。。。

有高手能给讲讲吗?为什么第一种和第三种可以连加,而第二中不行呢

补充:其中的"+="也是重载的,返回*this,BigInt内部数据是标准库模版string类型

[解决办法]

探讨

引用:

因为BigInt&是一个左值引用,而+运算符的结果是右值,是不能直接引用的,const BigInt&才可以引用一个右值,这是第二种失败的原因。


我大概明年您的意思了,您看是不是这样:

因为连加时候,第一次加完得到一个BigInt是一个右值,要作为输入,但输入类型是一个BigInt&,……

读书人网 >C++

热点推荐