-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. 什麼是Java「= +」運算符?
- 3. 什麼是「===」運算符?
- 4. 什麼是()=>運算符?
- 5. C++ - 什麼是運算符。*?
- 6. 後增量運算符的評估按什麼順序發生?
- 7. 運算符模塊中`in`的等效運算符是什麼?
- 8. 賦值運算符內部條件
- 9. 後增量運算符的行爲
- 10. python中的%運算符是什麼?
- 11. =>運算符是做什麼的?
- 12. - =運算符是做什麼的?
- 13. 什麼是HTML中的「:」運算符?
- 14. Ruby中的「=〜」運算符是什麼?
- 15. HAML - 「!=」運算符是做什麼的?
- 16. 什麼是重寫的C運算符++
- 17. 「+ =」運算符是做什麼的?
- 18. 模運算符的語義是什麼?
- 19. '&='和'=&'運算符是做什麼的?
- 20. *(++ ptr)是什麼類型的運算符?
- 21. 什麼是C++中的static_case運算符?
- 22. 什麼是Java中的&=運算符
- 23. :El =中的運算符是什麼?
- 24. @運算符的意義是什麼?
- 25. 什麼是C#中的「??」運算符?
- 26. 爲什麼++運算符將整數增加4而不是1?
- 27. 超載後遞增運算符
- 28. 後綴增量運算符評估
- 29. 重載後綴增量運算符
- 30. SQueryL波形符號運算符的作用是什麼?