效率: 条款21 利用重载技术避免隐式类型转换(implicit type conversions)

理解本条款内容之前需要先看一个例子:

class UPint
{
public:
    UPint();
    UPint(int value);
    ....
}
const UPint operator+(const UPint& lhs,const UPint& rhs);
UPint u1,u2;
UPint u3 = u1 + u2;//这没什么可讨论的,可以执行。
UPint u4 = 10+u2;
UPint u4 = u2+10;
以上例子也可以成功,它们之所以成功在于该语句产生了临时对象,并将整数10转换为UPint。
由编译器来执行此类隐式转换,很方便,但是此类转换会产生临时对象,从而产生我们不想要的运行成本。我们并不想进行隐式类型转换,我们想要的结果仅仅是为了能够使一个UPint类型与一个int类型能够进行operator+类型重载而已。如果我们想要能够对UPint和int进行加法,我们需要做的就是多声明几个重载函数,每个函数拥有不能的参数。如下列所示:

const UPint operator+(const UPint& lhs,const UPint& rhs);
const UPint operator+(cosnt UPint& lhs,int rhs);
const UPint operator+(int lhs,const UPint& rhs);

结论:使用函数重载来避免隐式类型转换所产生的临时对象,从而提高程序运行效率不仅仅局限运用在操作符函数身上。在大部分程序中,如果可以接受一个char*,你可能会希望也接受一个string对象。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值