注册 登录
编程论坛 新人交流区

[讨论]i++与++i的效率问题

zhy20045923 发布于 2007-10-03 18:18, 1505 次点击

++i相当于
i = i + 1;
return i;

而i++相当于
int j = i;
i = i+1;
return j;

由于i++还必须copy值给j,所以速度较慢。

相信很多人都习惯i++吧,呵呵。

26 回复
#2
ygh4494977112007-10-03 19:25
老大,这点差别对电脑的速度来说小菜
不过你在使用它们时别把自己饶进去啦,要知道许多编译系统在处理时顺序不同(有的从左到右,有的相反),慎用啊
#3
罗盘2007-10-08 15:48
这是应用与自加的先后问题,不是效率问题!?!
#4
whtydn2007-10-08 16:36
有理
#5
xhf8704042007-10-08 17:14

我的运算是自右至左的,有的是自左至右的,只是你自己要实现的是先+还是后+的问题
速度的影响就像蚊与牛的差别

#6
liuming20082007-10-08 17:51

这不是习不习惯的问题,++i和i++是2个不同的意思,使用上有很大的区别。
++i是前缀递增表达式。i++是后缀递增表达式.
如果i++用于一个赋值语句或printf()语句中,将先使用i的当前值或装其输出,然后在将i的值加1。

#7
yep2007-10-08 18:02

同一上楼的意见

#8
dishpzga2007-10-08 18:05
出现这两种写法原因不是在效率上
要知道什么时候用i++什么时候++i才是关键
#9
kavi2007-10-08 18:44
#10
user8866332007-10-08 19:55
学习了。
#11
sdz2007-10-08 20:16

i的取值有差别

#12
superstar1362007-10-08 20:29
最主要的是在什么情况下使用才是最重要的
#13
死神DIY2007-10-08 22:26
跟效率挂不上什么边,什么情况下就该用什么,用错了顺序就不对了……
#14
gamma2007-10-09 00:30
回答没关系的人,显然没有理解楼主的意思
首先佩服楼主,每个地方都要钻研清楚的人,才是最让人佩服的
楼主当然明白这两个的不同,否则不会写出那样的代码

跟楼主讨论一下,楼主是猜测的编译器会这么编译,还是实际上确实是这样的?
我觉得,编译器是不是也可以这样编译呢:

printf(i++)
=>
printf(i);
i=i+1;

printf(++i) =>
i=i+1;
printf(i);

如果是单独的i++ 和 ++i 语句,编译器一律编译成 i=i+1
#15
呆呆的出行者2007-10-09 00:33
我觉得对于某些场合下,还是要考虑的
#16
tianxinguang2007-10-09 16:59
xuexi
#17
没有注册2007-10-09 17:00

#18
wuhaofei2007-10-09 20:16
我頂你哦
#19
zsp12022007-10-14 21:36
学习
#20
yuziyi2007-10-14 23:16
  这个的却比较容易理解  好好努力哦
#21
ranshao2007-10-15 11:19
这只是运算符i++与++i的基本运算规则,大家多注意会少犯错
#22
lyj200124722007-10-15 12:36
我看过一本清华大学出版社从国外翻译过来的经典教材,作者强烈建议可以的话尽量使用++i,而非i++,他认为这是个好习惯.
#23
meteorluo2007-10-15 13:50


不错
#24
niuniu2009kk2007-10-15 13:59
收到
#25
Palepast2007-10-15 15:38
这个的效率基本忽略 要的应该是效果
#26
木益2007-10-15 15:57
3 楼 6楼讲的都有理由,我觉得不会牵涉到效率问题!
不过前缀和后缀要使用好啊。
#27
liu8511092007-10-16 12:27
这是 使用时有区别 不能用效率来 衡量它吧?
1