<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml xml:lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/vnd.wap.wml; charset=utf-8"/>
<meta http-equiv="Cache-Control" content="no-cache"/></head>
<card title="i++ 与 ++i 的性能区别 - Gracecode.com">
<p>很多有关程序设计的书中都会说明 ++i 与 i++ 的区别。比如经典的论述就是</p>

<pre>i = 5;
k = i++; // 此时 k 还是 5，但是 i 自增以后已经是 6</pre><p>而</p>

<pre>i = 5;
k = ++i;  // 此时 k 已经是 6，k 是 i 自增以后的值</pre><p>可能这样的说明还不够直观。总而言之，i++; 是一个右值，而 ++i 是一个左值。</p>

<p>加深印象，上述的两条语句可以用下面两个函数表示。</p>

<p>i++ 为</p>

<pre>function () {
    tmp = i;
    i = tmp + 1;
    return tmp;
}</pre><p>++i 为</p>

<pre>function () {
    i = i + 1;
    return i;
}</pre><p>可以参考<a href="http://www.eskimo.com/~scs/cclass/notes/sx7b.html" title="http://www.eskimo.com/~scs/cclass/notes/sx7b.html">这里获知详情</a>。总而言之，i++ 语句需要个临时变量，去存储返回自增前的值。</p>

<p>不要忽略这个变量的意义，了解过 C 等“低级”语言的朋友，可能会了解变量的内部机制（重新祭奠我老去的 C 语言知识）。首先，申请（malloc）一段内存空间，然后将值塞（push，压栈）进去，最后不用了释放（free）。</p>

<p>大家可能在循环中会经常的使用 i++ 这样的操作。在不影响逻辑的前提下，我建议使用 ++i ，虽然这点的优化非常的小。</p>

<p>最后，感谢 小马 的指出。</p>


<p>
<a href="http://www.gracecode.com/wap/">Gracecode.com</a> |
<a href="http://www.gracecode.com/wap/d/1426 ">Permalink</a>(<a href="http://www.gracecode.com/Archive/Display/1426 ">xHTML</a>) |
<a href="http://www.gracecode.com/Trackback/Recieve/1426/0owble">Trackback</a> |
<a href="http://rss.gracecode.com">Rss</a>
</p>
</card>
</wml>