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

来源:互联网 发布:vb comdlg32.ocx 编辑:程序博客网 时间:2024/06/01 10:31
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 是否正确的被翻成机器语言是十分重要的~
原创粉丝点击