C: ++i和i++的区别是什么?

在C语言中,使用++ii++有什么区别,在for循环的增量块中应该使用哪一个?

解决办法
  • ++i将增加i的值,然后返回增加的值。

       i = 1;
       j = ++i;
       (i是2,j是2)
  • i++将增加i的值,但返回i被增加前的原始值。

       i = 1;
       j = i++;
       (i是2, j是1)

对于一个 "for "循环,两种方法都可以。++i似乎更常见,也许是因为在K&R中使用的就是这个。

无论如何,遵循 "首选++i而不是i++"的准则,你就不会出错。

关于++ii++的效率,有几个评论。在任何非学生项目的编译器中,都不会有性能差异。 你可以通过查看生成的代码来验证这一点,这些代码将是相同的。

效率问题很有趣......这是我尝试的一个答案。

正如On Freund所指出的,这对C++对象来说是不同的,因为operator++()是一个函数,编译器不知道要优化掉创建一个临时对象来保存中间值。

评论(14)

++i增加数值,然后返回。

i++返回该值,然后增加该值。

这是一个微妙的区别。

对于一个for循环,使用++i,因为它稍快。i++会创建一个额外的副本,然后被扔掉。

评论(2)

++ii++稍快的原因是i++在增加i的值之前可能需要一个本地拷贝,而++i从不这样做。在某些情况下,如果可能的话,一些编译器会把它优化掉......但这并不总是可能的,而且不是所有的编译器都这样做。

我试着不太依赖编译器的优化,所以我会听从Ryan Fox的建议:当我可以同时使用两者时,我会使用++i

评论(1)