首先一点要说:++i的执行效率永远比i++要高,因为从函数的实现上i++的为:
function () {
tmp = i;
i = tmp + 1;
return tmp;
}
而++i的为:
function () {
i = i + 1;
return i;
}
i++是先取值然后再加一,而++i为先加一再取值,可以参考下面的例子:
i = 5;
k = i++; // 此时 k 还是 5,但是 i 自增以后已经是 6
而
i = 5;
k = ++i; // 此时 k 已经是 6,k 是 i 自增以后的值
可能这样的说明还不够直观。总而言之,i++; 是一个右值,而 ++i 是一个左值。
对于i++.是执行这一部分代码之后i的值才加一,而++i是执行之前就加一。如果执行以下代码:
int a =0, b = 0;
cout << "a的值为" << a++ << endl;
cout << "b的值为" << ++b<< endl;
则输出为:a的值为0
b的值为1
但是如果初始时i=1,a=0,则执行
++i;
a=i;
或者
i++;
a=i;
这两个代码执行的结果都一样都是a=i=1;因为对于后一段代码而言,当执行到a=i;时i的值已经加一了,所以a得值也为1。