2012-08-30 195 views

回答

1

简答题no。原因在于它是相同的操作,只是语句的评估顺序发生了变化。

实施例:

int a = x++; 
int b = ++x; 

伪组件:

mov a, x 
inc x 
inc x 
mov b, x 

这是一个简单的例子,但即使在较大的实施例中,可以发生最坏的是存储器屏障执行操作,其不允许后增量值被推或拉过去,由于依赖性或强制性障碍,这只会增加额外的mov操作。大多数编译器在使用指令重新排序的标准情况下优化掉这个额外的mov

3

这是一个反复反复的荒谬的神话。这两个运算符有语义的差异;一个结果是旧价值,另一个结果是新价值。如果您使用此结果,则代码将根据您使用的操作符而具有不同的行为,如果一种行为可以比另一种更有效地实现,则这可能包括性能差异。但是,如果您不使用结果,则所有x=x+1,x+=1,x++++x都是相同的