很多有关程序设计的书中都会说明 ++i 与 i++ 的区别。比如经典的论述就是
i = 5;
k = i++; // 此时 k 还是 5,但是 i 自增以后已经是 6
而
i = 5;
k = ++i; // 此时 k 已经是 6,k 是 i 自增以后的值
可能这样的说明还不够直观。总而言之,i++; 是一个右值,而 ++i 是一个左值。
加深印象,上述的两条语句可以用下面两个函数表示。
i++ 为
function () {
tmp = i;
i = tmp + 1;
return tmp;
}
++i 为
function () {
i = i + 1;
return i;
}
可以参考 这里获知详情 。总而言之,i++ 语句需要个临时变量,去存储返回自增前的值。
不要忽略这个变量的意义,了解过 C 等「低级」语言的朋友,可能会了解变量的内部机制(重新祭奠我老去的 C 语言知识)。首先,申请(malloc)一段内存空间,然后将值塞(push,压栈)进去,最后不用了释放(free)。
大家可能在循环中会经常的使用 i++ 这样的操作。在不影响逻辑的前提下,我建议使用 ++i ,虽然这点的优化非常的小。
最后,感谢 小马 的指出。