首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 前綴/後綴 ++/-- 重載全解析:語法、語義、效能與一致性

     編輯:關於C++

C++ 通過**後綴形式多一個 int 參數**區分重載:


UPInt& operator++();        // 前綴
const UPInt operator++(int); // 後綴(調用時編譯器傳 0)

標準語義實現


// 前綴:增後取
UPInt& UPInt::operator++() { *this += 1; return *this; }
// 後綴:取後增
const UPInt UPInt::operator++(int) {
    UPInt oldValue = *this;
    ++(*this);
    return oldValue;
}

後綴參數不用,省略參數名避免警告。

為何後綴返回 const?

防止 i++++ 合法。若非 const,i.operator++(0).operator++(0) 合法,第二次調用修改的是**臨時對象**而非原對象,導致 i 僅增 1,違背直覺且與內建類型行為不一致。返回 const 使臨時對象無法調用非 const 成員函數,編譯報錯。

效能差異

後綴**必須構造臨時對象**保存舊值,前綴無此開銷。**用戶定義類型應優先用前綴**,除非確需舊值。

一致性保證:後綴委託前綴


const UPInt UPInt::operator++(int) {
    UPInt oldValue = *this;
    ++(*this); // 調用前綴形式
    return oldValue;
}

僅維護前綴邏輯,後綴自動一致,防止多人維護產生分歧。

總結

掌握三點:**正確返回類型**、**後綴委託前綴**、**優先用前綴**——即能正確高效重載增減運算符。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved