第四章,效率

21-利用重载技术避免隐式类型转换

注意重载操作符函数可能隐式转换产生临时对象

class UPInt{
public:
UPInt();
UPInt(int value);
...
};

const UPInt operator+(const UPInt& lhs, const UPInt& rhs);

UPInt upi1, upi2;
...
UPInt upi3 = upi1 + upi2;//正常调用operator+,没有额外成本
UPInt upi3 = upi1 + 10; //会产生临时对象,付出构造析构成本,将10转型为UPInt
UPInt upi3 = 10 + upi1; //会产生临时对象,付出构造析构成本,将10转型为UPInt

//为避免产生临时对象,重载函数,提供对应的参数列表
const UPInt operator+(const UPInt& lhs, int rhs);
const UPInt operator+(int lhs, const UPInt& rhs);

//注意:每个重载操作符函数参数必须包含至少一个定制类型,不能全是C++内置类型,例如operator+(int,int)是错误的(参数列表不能全是C++内置类型)
const UPInt operator+(int lhs, int rhs);//错误!!!