more effective C++条款六解析

时间:2022-03-28 04:00:58

区分前置increment与后置increment

区分前置与后置++,首先明确他们的操作符重载带来的写法上的不同:

class UPInt
{
public:
UPint& operator++() {*this+=1;return *this}
const UPInt operator++(int) { UPInt oldValue=*this;++(*this);return oldValue;}
}
值得注意的就是两个地方,一就是操作符重载的形式后置的++会在后面添加int,虽然没有被使用。

第二个值得注意的是operator++(int)返回的是一个const 因为类似UPInt++++的行为是不被允许的(内置类型int 也不允许++++,另外这样就算可以也会造成不明确,只会加一次,所以说返回const UPInt)。

从代码中我们可以发现,后置的效率显示式没有前置的高的,所以在程序行为一致的情况下,建议使用的是前置的++。