class UPInt
{
public:
UPInt();
UPInt( int value);
....
};
const UPInt operator+( const UPInt& lhs, const UPInt& rhs);
UPInt upi1, upi2;
UPInt upi3 = upi1 + upi2;
upi3 = upi1 + 10;
upi3 = 10 + upi2;
上面两行语句之所以能执行成功,是因为产生了临时对象,将整数10转换为UPInt。
但是此类转换所产生的临时对象带来一些成本并不是我们想要的。
可以通过重载+来消除临时对象的产生。
const UPInt operator+( const UPInt& lhs, int rhs);
const UPInt operator+( int rhs, const UPInt& lhs);
每一个重载操作符必须获得至少一个“用户定制类型”的自变量。
More Effective C++ ----21th