我听说它说前缀增量比 C 中的后缀增量快。这是真的吗?为什么?
++x 与 x++
这是一个荒谬的神话,一遍又一遍地重复。这两个运算符有语义差异;一个结果是旧值,另一个结果是新值。如果您使用此结果,代码将根据您使用的运算符具有不同的行为,如果一种行为可以比另一种更有效地实现,这可能包括性能差异。但如果你不使用结果,x=x+1
, x+=1
, x++
, 和++x
都是相同的。
简短的回答没有。原因是它是相同的操作,只是语句的评估顺序发生了变化。
例子:
int a = x++;
int b = ++x;
伪组装:
mov a, x
inc x
inc x
mov b, x
这是一个微不足道的例子,但即使在更大的例子中,最糟糕的可能是内存屏障强制操作,它不允许将后增量值推入或拉过它,这只是mov
由于依赖或强制屏障而增加了额外的操作. mov
无论如何,大多数编译器都会在标准情况下使用指令重新排序来优化这个额外的东西。