理解本条款内容之前需要先看一个例子:
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对象。
本文通过一个具体的UPint类示例介绍了如何通过函数重载来避免不必要的隐式类型转换,以此减少程序运行时的成本。文章强调了在进行类型重载时,通过提供不同参数组合的重载函数可以有效避免创建临时对象,进而提升程序的整体性能。
1319

被折叠的 条评论
为什么被折叠?



