1. 程式人生 > >3 More Effective C++—條款6(自定義自增/自減操作符)

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, 由於前置式實現較簡單,因此後置式可呼叫前置式來實現。