例如有以下例子
const Rational operator*(const Rational& lhs,const Rational& rhs)
{
static Rational result;
result=…;
return result
}
bool operator==(const Rational& lhs,
const Rational& rhs);
Rational a,b,c,d;
…
if((ab)(cd)){
}else
{
}
不管a,b,c,d的值是什么,(ab)(cd)都为true,我们将代码写成等价的函数表达式分析一下
if(operator==(operator(a,b),operator*(c,d)))
在operator=调用之前,两个operator已经开始调用了,虽然a,b,c,d为不同的值,但函数里面的Rational result是静态的,所以值一直相同。
这种情况下如何处理呢,我们可以返回一个新的对象例如
inline const Ration operator(const Rational&lhs,const Rational&rhs)
{
return Rational(lhs.nrhs.n,lhs.dlhs*d);
}
必须返回对象时,别妄想返回一个reference
最新推荐文章于 2022-12-01 10:46:08 发布