您的位置:首页 > 其它

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

2016-02-28 19:52 459 查看
理解本条款内容之前需要先看一个例子:

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对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: