2017-02-03 55 views

回答

1

这是不是很准确的说,后增加/减少运算符操作后的价值返回它。这些运算符的语义,因为它们在Java,C++和其他所有有这种运算符的语言中定义,它们是修改该值并返回旧值。

我们可以定义一个C++函数,正是模仿的++ 这样的行为:

int post_inc(int& x) { 
    int old_x = x; 
    x = x + 1; 
    return old_x; 
} 

在生成的装配,以实现后置的最直接的方式而言(假设变量驻留在一个寄存器中)是将其复制到第二个寄存器中,递增第一个寄存器,然后使用第二个寄存器中的任何一个表达式x++。如果需要,变量从内存中读入到第一个寄存器中,增量后从第一个寄存器写回内存。

在很多情况下,优化编译器会重新安排代码,只使用一个单一寄存器,该寄存器在表达式后递增(但在所有情况下都不可能 - 例如,如果变量本身不可用用于相同的表达式(禁止C或C++中的未定义行为))。

就Java字节码而言,实现方法是:将变量的当前值压入堆栈,递增变量(不接触堆栈),然后评估使用x++的表达式。


减不确定的行为,因为函数调用引入序列点