所以,我知道许多 C 风格的语言都有递减 ( --
) 和递增 ( ++
) 运算符,并允许在评估整个表达式之前或之后发生突变。
当退货发生后增量时会发生什么?我问的不是行为,而是执行。
给定虚拟机(例如 JavaScript/JVM)或物理机(例如编译的 C++),生成的操作码是否类似于以下内容?(假设基于堆栈的参数/返回。)
int x = 4, y = 8;
return f(++a) + y++;
变成这样:(也许?)
LOAD 4 A
LOAD 8 B
INC A
PUSH A
CALL F
POP INTO C
ADD C BY B
INC B
RET C
如果是这样,当表达式变得复杂时,这些语言中的此类操作如何决定在哪里嵌入增量,甚至可能有点 Lispish?