论i++和++i的不同之处_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 论i++和++i的不同之处

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

 2013/10/14 20:41:48  黑色_幽默  程序员俱乐部  我要评论(0)
  • 摘要:废话不说,直接引入正题~++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指TheCProgrammingLanguage一书,该书中代码风格简练,被极大的推崇)------------------
  • 标签:
废话不说,直接引入正题~


++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一书,该书中代码风格简练,被极大的推崇)

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

关于++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++
上一篇: 微软创投加速器启动第四期初创企业招募 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名