-1
A
回答
1
這是不是很準確的說,後增加/減少運算符操作後的價值返回它。這些運算符的語義,因爲它們在Java,C++和其他所有有這種運算符的語言中定義,它們是修改該值並返回舊值。
我們可以定義一個C++函數,正是模仿的++
這樣的行爲:
int post_inc(int& x) {
int old_x = x;
x = x + 1;
return old_x;
}
在生成的裝配,以實現後置的最直接的方式而言(假設變量駐留在一個寄存器中)是將其複製到第二個寄存器中,遞增第一個寄存器,然後使用第二個寄存器中的任何一個表達式x++
。如果需要,變量從內存中讀入到第一個寄存器中,增量後從第一個寄存器寫回內存。
在很多情況下,優化編譯器會重新安排代碼,只使用一個單一寄存器,該寄存器在表達式後遞增(但在所有情況下都不可能 - 例如,如果變量本身不可用用於相同的表達式(禁止C或C++中的未定義行爲))。
就Java字節碼而言,實現方法是:將變量的當前值壓入堆棧,遞增變量(不接觸堆棧),然後評估使用x++
的表達式。
減不確定的行爲,因爲函數調用引入序列點
相關問題
- 1. 運作遞增運算符
- 2. 錯誤「Bannon'運算符後缺少操作數」 - 'Bannon'運算符是什麼?
- 3. 後增量運算符++
- 4. 什麼是| =賦值運算符?
- 5. 什麼是Java「= +」運算符?
- 6. 什麼是 - >運算符?
- 7. 什麼是「===」運算符?
- 8. 什麼是()=>運算符?
- 9. C++ - 什麼是運算符。*?
- 10. 什麼是##運算符?
- 11. 是什麼?:運算符
- 12. 運算符&&是什麼?
- 13. int.parse(「1」)後爲什麼不允許後綴增量(++)運算符?
- 14. 後增量運算符的評估按什麼順序發生?
- 15. 運算符模塊中`in`的等效運算符是什麼?
- 16. 賦值運算符內部條件
- 17. 後增量運算
- 18. 關係運算符是否影響賦值運算符操作?
- 19. 爲什麼Ada中沒有(增強賦值)運算符,如+ =, - =或++?
- 20. 爲什麼預增加運算符在C中給出右值?
- 21. 後增量運算符的行爲
- 22. 增量運算符
- 23. python中的%運算符是什麼?
- 24. 「+ =」運算符是做什麼的?
- 25. @運算符的意義是什麼?
- 26. 什麼是scala Stream中的#::運算符?
- 27. HAML - 「!=」運算符是做什麼的?
- 28. 模運算符的語義是什麼?
- 29. 什麼是JPQL中的BINARY運算符?
- 30. C中的'#'運算符是什麼?