3 More Effective C++—条款6(自定义自增/自减操作符)

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, 由于前置式实现较简单,因此后置式可调用前置式来实现。

猜你喜欢

转载自blog.csdn.net/zhizifengxiang/article/details/82957126