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
的初始设置。这是完整的。
这就是后缀增量的工作原理。我将演示使用汇编程序和使用寄存器的操作顺序,以避免混淆临时变量(实际上不存在)。
这些说明(后缀增量):
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”递增,因此值发生了变化。
这几乎是每种编程语言处理它的方式。这根本与三元运算符无关。
当q.rel为3时,所有这些都可以减少到:
pCode = pCode++;
问:那么这是平等的呢?
答:它什么都不做。 pCode
永远不会增加
pCode = ++pCode;
增量。或者更完整:
for (q in qry) {
pCode = (q.rel NEQ 3 ? q.rel
: pCode GTE 3 ? ++pCode : 3);
...
}