条款22:考虑以操作符复合形式(op=)取代其独身形式(op)
一般而言,操作符的复合版本比独立的版本效率要高,独立版本一般会返回一个新对象,所以要承担这个新对象带来的构造和析构成本;复合版本一般直接把数据写进左值。我们需要注意的是编译器一般会对不具名的对象进行优化,而对具名对象通常无能为力。所以对同样的实现,
template<class T> const T operator+(const T& lhs ,const T& rhs)
{
//实现一
return T(lhs) += rhs;
//实现二
T result(lhs);
return result += rhs;
}
对实现一,也许编译器要花费一个临时对象的成本;但对于实现二,肯定要花费一个局部对象的成本;如果一定要选择一种写法,请选择第一种。而且我们在调用操作符的时候,优先调用复合形式。