i++ 和 ++i 区别与分析

i = 1;
j = i++;
结果  i = 2,j = 1
如果是:
i = 1;
j = ++i;
结果  i = 2,j = 2

http://www.programmer-club.com/showSameTitleN/homework/4354.html


C++ Operator: Why should I use '++i' instead of 'i++'?
http://www.codeguru.com/forum/showthread.php?t=231052

i++的执行过程类似于:
temp = i
i = i+1
return temp

------------------------

++i的执行过程类似于

i = i+1
return i
------------------------
因为i++多一个动作.....所以++i比较快


就class的operator而言是对的, 但就纯资料而言都是一样快.如果是数字的operator, 那么i++便是:


mov ax,i
inc i


++i则是:


inc i
mov ax,i


两者是一样的.


理论上是这样子, 而這这也是 C++ 里 overloaded operator 的一般做法. 


但以 built-in type 来说, 单纯的 ++i 或 i++,经过 optimization 后, 两者可能没什么差別. 


也就是说:


  (1)  ++i;
  (2)  i++;
  (3)  i += 1;
  (4)  i = i+1;


Optimization 后的结果有可能是一样的.

正确的说法是: ++i绝对不会比 i++ 慢.


一般的做法是: 可能的话, 用 ++i; 有需要的话才用 i++.


Use ++i if possible; use i++ if necessary.


Optimize 后的結果是会使两者相同-这是因为当暂存器(尤指AX)有空时~

尤其是当会overflow时,是哪个地方造成overflow 对logic 是否正确的被翻成机器语言是十分重要的~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值