40_前置操作符和后置操作符

1. i++和++i和區(qū)別

i++; // i 的值作為返回值, i 自增 1;
++i; // i 自增1, i 的值作為返回值

  • 在工程中,獨立的i++;++i;是沒有區(qū)別的,因為在沒有返回值的情況下,編譯器會對它們做優(yōu)化處理,使得這兩條語句完全一樣。

2. 意想不到的事實

  • 現代編譯器產品會對代碼進行優(yōu)化
  • 優(yōu)化使得最終的二進制程序更加高效*
  • 優(yōu)化后的二進制程序丟失了C/C++的原生語義
  • 不可能從編譯后的二進制程序還原C/C++程序——因編譯器對代碼進行優(yōu)化后,其優(yōu)化后的二進制程序丟失了C/C++的原生語義。
    C/C++開發(fā)的軟件無法完全反編譯!?。?/strong>

3. ++操作符的重載

  • 全局函數成員函數均可進行重載
  • 重載前置++操作符不需要額外的參數
  • 重載后置++操作符需要一個int類型的占位參數

編程說明:++操作符的重載

#include <iostream>
#include <string>

using namespace std;

class Test
{
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }
    
    int value()
    {
        return mValue;
    }
    
    Test& operator ++ ()        //  前置++重載操作符
    {
        ++mValue;
        return *this;
    }
    
    Test operator ++ (int)      // 后置++重載操作符
    {
        Test ret(mValue);
    
        mValue++;
        return ret;
    }
};  

int main()
{
    Test t0(0);

    cout << "t0.value() = " << t0.value() << endl;
    
    Test t1 = ++t0;
    
    cout << "t1.value() = "<< t1.value() << endl;

    Test t2 = t0++;
    
    cout << "t2.value() = " << t2.value() << endl; 
    
    return 0;
}

輸出結果

t0.value() = 0
t1.value() = 1
t2.value() = 1

4. 真正的區(qū)別—— ++i和i++的區(qū)別

  • 對于基本類型的變量:前置++的效率與后置++的效率基本相同,可以根據項目組編碼規(guī)范進行選擇
  • 對于類類型的對象:前置++的效率高于后置++,因此盡量使用前置++操作符提高程序效率

5. 小結

  • 編譯優(yōu)化使得最終的可執(zhí)行程序更加高效
  • 前置++操作符和后置++操作符都可以被重載
  • ++操作符的重載必須符合其原生語義
  • 對于基礎類型,前置++與后置++的效率幾乎相同
  • 對于類類型,前置++的效率高于后置++
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,673評論 18 399
  • 鞋子與地板的摩擦聲 點點滴滴 音樂一般在耳邊想起 夜色朦朧 燈火輝煌 冬日的暖陽 噼里啪啦之間 跳躍的面孔熟悉依然...
    石川河女神閱讀 281評論 0 0
  • 前段時間看到微信朋友圈有文言,新月許愿、滿月冥想,再加上素食,能量獲得很好地提升。心生向往。 昨晚正值滿月,楊姐帶...
    安淼兒閱讀 1,232評論 0 0
  • 今天直接在昨天的文章頁面修改發(fā)布,然后把昨天的文章沖掉了,再也找不回來。真是哭暈在廁所啦。 從6月2日開始為自己訂...
    四十一度閱讀 171評論 0 0

友情鏈接更多精彩內容