废话不说,直接引入正题~
++i会将i的值自增1,然后将i的值返回。
class="java" name="code">
i = 1;
j = ++i;
(i 等于 2, j 等于 2)
i++会将i的值自增1,但是将自增之前的值返回
i = 1;
j = i++;
(i 等于 2, j 等于 1)
对于一个for循环来说
for(...;...;i++){}
for(...;...;++i){}
通常来说,更加倾向于使用++i,因为在K&R中使用++i (注:K&R指The C Programming Language一书,该书中代码风格简练,被极大的推崇)
----------------------------------------------------------------------
关于++i和i++的效率问题,一直是人们讨论的话题。
实际上,i++和++i在c语言里面效率是一样的,这里引用一个Example
extern void g(int i);
void f()
{
int i;
for (i = 0; i < 100; i++)
g(i);
}
extern void g(int i);
void f()
{
int i;
for (i = 0; i < 100; ++i)
g(i);
}
经过编译后
$ md5 i++.s ++i.s
MD5 (i++.s) = 90f620dda862cd0205cd5db1f2c8c06e
MD5 (++i.s) = 90f620dda862cd0205cd5db1f2c8c06e
$ md5 *.o
MD5 (++i.o) = dd3ef1408d3a9e4287facccec53f7d22
MD5 (i++.o) = dd3ef1408d3a9e4287facccec53f7d22
而在C++里面,++i的效率则要比i++更高,这是因为,在C++里面的operator++()是一个函数,编译器并不知道i++临时保存下来的可以被优化。
总而言之的话,我个人推荐在无必要的情况下,采用++i代替i++