精华 C/C++ -- 004

胡说之

Moderator
注册
2002-01-17
消息
5,182
荣誉分数
6
声望点数
0
Why preincrement operator is faster than postincrement?

这个真的有点变态: ++i 为什么比i++ 快?
 
那个是古代编译器的行为.
现在的编译器比较聪明, 可以识别, 出来是一样的码.
 
++i 和 i++并不是在所有的情况下都可以互换, 如果编译出来的码一样, 有可能会乱套.
 
我来尝试解释一下,++i,就是用i这个变量,用完这次后,把i自身++,
比如j = ++i;翻译成j = i; i = i + 1;也就是说,在使用i这个变量的值的时候,不用等待i自己做++。这个在并行处理时,可以同时进行,因为j不需要等待i自加的结果。

但是如果是j = i++;那么就是翻译成i = i+1; j=i;这时j必须等上一条语句的结果,这个是没法并行处理的。

可能就是这个原因吧。
 
Klavier 说的有道理. 执行中会出现blocked, non-blocked两种不同情形,从而造成了速度差异.

不过你贴子里刚好把++i 和 i++的情形搞反了. ++i是preincrement, 要先加1,才能assign给j. 写个小程序跑一下就清楚了.
 
嗯,谢谢斧正,因为我写程序很少用的++i,这样程序看起来虽然简单,但是逻辑上太容易搞混乱,
我都是分开写成两句,清晰,好懂,不易出错。
i++我大多只是在循环语句里使用,并且是作为单独的语句,不放在表达式里。
 
最初由 klavier 发布
嗯,谢谢斧正,因为我写程序很少用的++i,这样程序看起来虽然简单,但是逻辑上太容易搞混乱,
我都是分开写成两句,清晰,好懂,不易出错。
i++我大多只是在循环语句里使用,并且是作为单独的语句,不放在表达式里。

agree, 程序写得越让人能看懂越好。
 
后退
顶部