-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波形符号运算符的作用是什么?