首先,先看一个例子:
class UPInt {
public:
UPInt();
UPInt(int value);
...
}
const UPInt operator +(const UPInt& object1,const UPInt& object2);
UPInt object1,object2;
UPInt object3=object1+object2;//调用opeator +
这样肯定是正确的,但是,中间产生了临时对象,临时对象的构造跟析构是会影响效率的。
现在考虑如下:
object3=object1+10;
object3=10+object2;
这样也能成功,编译器会利用10构造一个临时对象,但这明显不是我们想要的消耗。
解决方法就是重载+ 号操作符
如:
const UPInt operator +(UPInt& object1,int ints);
...
但是 const UPInt operator +(int i1,int i2);//错误,c++规定,每一个“重载操作符”必须获得至少一个用户自定义类型(类)。
总结:可以借由函数重载技术避免隐式类型转换。但是,不要忘记80-20法则,这样会使得代码增加。