3 More Effective C++—條款6(自定義自增/自減操作符)
阿新 • • 發佈:2018-12-13
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, 由於前置式實現較簡單,因此後置式可呼叫前置式來實現。