Programming languages 增量后运算符的内部工作原理是什么? 我想知道在任何编程语言中执行后增量或后减量操作的内部功能,如java或C++。

Programming languages 增量后运算符的内部工作原理是什么? 我想知道在任何编程语言中执行后增量或后减量操作的内部功能,如java或C++。,programming-languages,Programming Languages,我的意思是,某些东西(函数、方法…)如何返回一个值,然后再对其执行操作?说后递增/递减运算符在返回值后对其进行操作并不十分准确。这些运算符的语义,如爪哇、C++和其他所有具有这种运算符的语言所定义的,是它们修改值然后返回旧值。 我们可以定义一个C++函数,它精确模仿 ++> /COD> 1这样的行为: int post_inc(int& x) { int old_x = x; x = x + 1; return old_x; } 就生成的程序集而言,实现post

我的意思是,某些东西(函数、方法…)如何返回一个值,然后再对其执行操作?

说后递增/递减运算符在返回值后对其进行操作并不十分准确。这些运算符的语义,如爪哇、C++和其他所有具有这种运算符的语言所定义的,是它们修改值然后返回旧值。

我们可以定义一个C++函数,它精确模仿<代码> ++> /COD> 1这样的行为:

int post_inc(int& x) {
    int old_x = x;
    x = x + 1;
    return old_x;
}
就生成的程序集而言,实现postincrement(假设变量驻留在寄存器中)最直接的方法是将其复制到第二个寄存器中,递增第一个寄存器,然后在使用
x++
的表达式中使用第二个寄存器。如有必要,变量在开始时从内存读入第一个寄存器,并在增量后从第一个寄存器写入内存

在许多情况下,优化编译器会重新安排代码,只使用单个寄存器中的一个寄存器,该寄存器在表达式之后递增(但这并非在所有情况下都是可能的-例如,如果变量本身在同一表达式中使用(除非在C或C++中存在未定义的行为),它将无法工作)

就Java字节码而言,实现是:将变量的当前值推送到堆栈上,增加变量(不接触堆栈),然后计算使用
x++
的表达式


1减去未定义的行为,因为函数调用引入了序列点