胡说之 Moderator 注册 2002-01-17 消息 5,182 荣誉分数 6 声望点数 0 2003-11-28 #1 Why preincrement operator is faster than postincrement? 这个真的有点变态: ++i 为什么比i++ 快?
Kent以东首帅哥 新手上路 注册 2002-01-27 消息 10,446 荣誉分数 0 声望点数 0 2003-11-28 #2 那个是古代编译器的行为. 现在的编译器比较聪明, 可以识别, 出来是一样的码.
胡说之 Moderator 注册 2002-01-17 消息 5,182 荣誉分数 6 声望点数 0 2003-11-28 #3 ++i 和 i++并不是在所有的情况下都可以互换, 如果编译出来的码一样, 有可能会乱套.
K klavier 新手上路 注册 2002-07-09 消息 210 荣誉分数 0 声望点数 0 2003-11-29 #4 我来尝试解释一下,++i,就是用i这个变量,用完这次后,把i自身++, 比如j = ++i;翻译成j = i; i = i + 1;也就是说,在使用i这个变量的值的时候,不用等待i自己做++。这个在并行处理时,可以同时进行,因为j不需要等待i自加的结果。 但是如果是j = i++;那么就是翻译成i = i+1; j=i;这时j必须等上一条语句的结果,这个是没法并行处理的。 可能就是这个原因吧。
我来尝试解释一下,++i,就是用i这个变量,用完这次后,把i自身++, 比如j = ++i;翻译成j = i; i = i + 1;也就是说,在使用i这个变量的值的时候,不用等待i自己做++。这个在并行处理时,可以同时进行,因为j不需要等待i自加的结果。 但是如果是j = i++;那么就是翻译成i = i+1; j=i;这时j必须等上一条语句的结果,这个是没法并行处理的。 可能就是这个原因吧。
胡说之 Moderator 注册 2002-01-17 消息 5,182 荣誉分数 6 声望点数 0 2003-11-29 #5 Klavier 说的有道理. 执行中会出现blocked, non-blocked两种不同情形,从而造成了速度差异. 不过你贴子里刚好把++i 和 i++的情形搞反了. ++i是preincrement, 要先加1,才能assign给j. 写个小程序跑一下就清楚了.
Klavier 说的有道理. 执行中会出现blocked, non-blocked两种不同情形,从而造成了速度差异. 不过你贴子里刚好把++i 和 i++的情形搞反了. ++i是preincrement, 要先加1,才能assign给j. 写个小程序跑一下就清楚了.
K klavier 新手上路 注册 2002-07-09 消息 210 荣誉分数 0 声望点数 0 2003-11-30 #6 嗯,谢谢斧正,因为我写程序很少用的++i,这样程序看起来虽然简单,但是逻辑上太容易搞混乱, 我都是分开写成两句,清晰,好懂,不易出错。 i++我大多只是在循环语句里使用,并且是作为单独的语句,不放在表达式里。
嗯,谢谢斧正,因为我写程序很少用的++i,这样程序看起来虽然简单,但是逻辑上太容易搞混乱, 我都是分开写成两句,清晰,好懂,不易出错。 i++我大多只是在循环语句里使用,并且是作为单独的语句,不放在表达式里。
笨 笨石 知名会员 注册 2003-08-04 消息 1,451 荣誉分数 4 声望点数 148 2003-11-30 #7 最初由 klavier 发布 嗯,谢谢斧正,因为我写程序很少用的++i,这样程序看起来虽然简单,但是逻辑上太容易搞混乱, 我都是分开写成两句,清晰,好懂,不易出错。 i++我大多只是在循环语句里使用,并且是作为单独的语句,不放在表达式里。 点击展开... agree, 程序写得越让人能看懂越好。
最初由 klavier 发布 嗯,谢谢斧正,因为我写程序很少用的++i,这样程序看起来虽然简单,但是逻辑上太容易搞混乱, 我都是分开写成两句,清晰,好懂,不易出错。 i++我大多只是在循环语句里使用,并且是作为单独的语句,不放在表达式里。 点击展开... agree, 程序写得越让人能看懂越好。