2017-02-03 25 views

回答

1

這是不是很準確的說,後增加/減少運算符操作後的價值返回它。這些運算符的語義,因爲它們在Java,C++和其他所有有這種運算符的語言中定義,它們是修改該值並返回舊值。

我們可以定義一個C++函數,正是模仿的++ 這樣的行爲:

int post_inc(int& x) { 
    int old_x = x; 
    x = x + 1; 
    return old_x; 
} 

在生成的裝配,以實現後置的最直接的方式而言(假設變量駐留在一個寄存器中)是將其複製到第二個寄存器中,遞增第一個寄存器,然後使用第二個寄存器中的任何一個表達式x++。如果需要,變量從內存中讀入到第一個寄存器中,增量後從第一個寄存器寫回內存。

在很多情況下,優化編譯器會重新安排代碼,只使用一個單一寄存器,該寄存器在表達式後遞增(但在所有情況下都不可能 - 例如,如果變量本身不可用用於相同的表達式(禁止C或C++中的未定義行爲))。

就Java字節碼而言,實現方法是:將變量的當前值壓入堆棧,遞增變量(不接觸堆棧),然後評估使用x++的表達式。


減不確定的行爲,因爲函數調用引入序列點