后增量运算符的内部工作原理是什么?

时间:2017-02-03 18:18:41

标签: programming-languages

我想知道在任何编程语言中执行后增量或后减量操作的内部功能,例如java或c ++。

我的意思是,某些东西(函数,方法......)如何返回一个值然后在它上面执行操作?

1 个答案:

答案 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 减去未定义的行为,因为函数调用引入了一个序列点