More Effective C++之21

条款21:利用重载技术(overload)避免隐式型别转换(implicit type conversions)
class Rational
{
……

const Rational operator+(const Rational& lhs, const Rational rhs);

……
}

如果我们这么写:
Rational a(10);

Rational b(10,11);

Rational c = a + b;

这样当然是最理想的结果了,没有什么额外的成本,但事实往往并非如此,例如,Rational c = a + 10; C++当然很乐意将10转化成Rational对象,然而这意味的是成本的增加。所以,我们可以使用重载技术。

const Rational operator+(const Rational& lhs, const Rational& rhs);

const Rational operator+(int lhs, const Rational& rhs);

const Rational operator+(const Rational& lhs, int rhs);

当然我们做不到const Rational operator+(int lhs, int rhs);这违反了重载的规则。重载函数的弊端是容易混淆,增加了二义性出现的几率,所以如何权衡还需要看实际的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值