`
黑色_幽默
  • 浏览: 1948 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

论i++和++i的不同之处

阅读更多
废话不说,直接引入正题~


++i会将i的值自增1,然后将i的值返回。
 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一书,该书中代码风格简练,被极大的推崇)

----------------------------------------------------------------------

关于++ii++的效率问题,一直是人们讨论的话题。


实际上,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++
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics