1 重载操作符
C++允许用户自定义自增、自减操作符。两种操作符都有对应的前置、后置形式。如下所示:
index++ // 返回原值,并自增
++index // 自增,并返回新值
index--
--index
重载操作符如下代码所示。由于前置(prefix)和后置(suffix)两种形式都没有参数,为了区别两种重载,需要为后置操作符补一个int类型参数,且编译器默认该参数值为0。
同时,一些编译器禁止函数不用传入的形参,因此int后面没有变量名称(函数签名类型相同正确即可,名称可任意)。
class MyClass {
public:
MyClass& operator++(); // 前置自增
const MyClass operator++(int); // 后置自增
}
MyClass index;
++index; // 调用 index.operator++()
index++; // 调用 index.operator++(0)
2 解释说明
对于前置和后置自增,需要注意如下几个细节。
1 前置操作符返回一个引用,且通过该引用可以修改。
2 后置操作符返回一个const 对象。对于index++,其实际进行了两个步骤,获得两个不同的对象——值更新的对象,和原始值的对象。如果再进行一次后置操作,那么将会得到三个值:一个原始值和两个个原始值加1。这样做显然不符合逻辑。使用const可以屏蔽对index++返回值的进一步修改。
3 应用
由上面分析,可得出以下几点应用:
1, 因为前置式只对一个对象操作,返回一个对象,因此其效率更高。而后置式生成了新对象,因此效率更低。
2, 由于前置式实现较简单,因此后置式可调用前置式来实现。