三元运算符中的变量从不递增

Variable in ternary operator never increments

q.rel 可以是 1、2 或 3

for (q in qry) {

    pCode = (q.rel NEQ 3 ? q.rel 
       : pCode GTE 3 ? pCode++ : 3);

    ...
}

如果有一堆q.rel连续3个,pCode应该递增,但只显示3。

请注意,其他任何地方都没有 pCode 的初始设置。这就完成了。

当q.rel为3时,所有这些都可以归结为:

pCode = pCode++;

问。那么这等于什么?
A. 它什么都不做。 pCode 永远不会递增

pCode = ++pCode;

确实递增。或者更完整:

for (q in qry) {

    pCode = (q.rel NEQ 3 ? q.rel 
       : pCode GTE 3 ? ++pCode : 3);

    ...
}

这就是后缀递增的工作原理。我将演示汇编器的操作顺序,并使用寄存器来避免对临时变量(实际上不存在)产生混淆。

这些指令(后缀增量):

x = 0;
x = x++;
// x is still 0

翻译成:

mov eax, 0   ; x = 0
mov ebx, eax ; x assignment on the right-hand side
mov eax, ebx ; x = x
inc ebx      ; x++

"x" 在 赋值执行后递增 ,因此值从未改变。

现在这些指令(前缀递增):

x = 0;
x = ++x;
// x is now 1

翻译成:

mov eax, 0   ; x = 0
mov ebx, eax ; x assignment on the right-hand side
inc ebx      ; ++x
mov eax, ebx ; x = x

"x" 在 执行赋值之前递增 ,因此值发生了变化。

这几乎是每种编程语言处理它的方式。这与三元运算符完全无关。