我想知道在任何编程语言中执行后增量或后减量操作的内部功能,例如java或c ++。
我的意思是,某些东西(函数,方法......)如何返回一个值然后在它上面执行操作?
答案 0 :(得分:1)
在返回后,后递增/递减运算符对值进行操作并不十分准确。这些运算符的语义,因为它们在Java,C ++以及可能具有此类运算符的所有其他语言中定义,它们是修改值然后返回旧值。
我们可以像这样定义一个完全模仿++
1 行为的C ++函数:
int post_inc(int& x) {
int old_x = x;
x = x + 1;
return old_x;
}
就生成的程序集而言,实现后增量的最直接的方法(假设变量驻留在寄存器中)是将其复制到第二个寄存器中,递增第一个寄存器,然后使用第二个寄存器中的任何一个表达式x++
用于。如果需要,变量在开始时从存储器读入第一个寄存器,并在增量后从第一个寄存器写回存储器。
在许多情况下,优化编译器会重新安排代码,只使用一个寄存器,在表达式后递增(但在所有情况下都不可能 - 例如它不会如果变量本身在同一个表达式中使用(在C或C ++中禁止未定义的行为),则可以工作。)
就Java字节码而言,实现是:将变量的当前值压入堆栈,增加变量(不触及堆栈),然后评估使用x++
的表达式。
1 减去未定义的行为,因为函数调用引入了一个序列点