必须返回对象时,别妄想返回一个reference

本文探讨了C++中运算符重载的细节,特别是针对Rational类的乘法和等于运算符的实现。通过分析静态变量在运算符重载中的作用,提出了一种改进的方法,即返回一个新的对象来避免潜在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例如有以下例子
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((a
b)(cd)){
}else
{
}
不管a,b,c,d的值是什么,(a
b)
(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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值