摘要:
如果定义++c,也要定义c++:递增和递减操作符很麻烦,因为它们都有前缀和后缀形式,而两种形式语义又略有不同。定义operator ++和operator –时,应该模仿它们对应的内置操作符,如果不需要原值,应该优先调用前缀版本。
对于++和—而言,后缀形式返回的是原值,而前缀形式返回的是操作后的新值。应该用前缀形式实现后缀形式,标准形式是:
//前缀形式++ T&T::operator++() { //执行递增 return *this; } //前缀形式-- T&T::operator--() { //执行递减 return *this; }
//后缀形式++ TT::operator(int) { T old(*this); ++*this; return old; } //后缀形式-- TT::operator(int) { T old(*this); --*this; return old; }
因此,在调用代码时,要优先使用前缀形式,除非确实需要后缀形式返回的原值。前缀形式在语义上与后缀形式是等价的,输入工作量也相当,只是效率会略高一些,因为前缀形式少创建了一个对象。这不是不成熟的优化,这是在避免不成熟的劣化。