C: ++i和i++的区别是什么?
在C语言中,使用++i
和i++
有什么区别,在for
循环的增量块中应该使用哪一个?
813
3
在C语言中,使用++i
和i++
有什么区别,在for
循环的增量块中应该使用哪一个?
++i
将增加i
的值,然后返回增加的值。i++
将增加i
的值,但返回i
被增加前的原始值。对于一个 "for "循环,两种方法都可以。
++i
似乎更常见,也许是因为在K&R中使用的就是这个。无论如何,遵循 "首选
++i
而不是i++
"的准则,你就不会出错。关于
++i
和i++
的效率,有几个评论。在任何非学生项目的编译器中,都不会有性能差异。 你可以通过查看生成的代码来验证这一点,这些代码将是相同的。效率问题很有趣......这是我尝试的一个答案。
正如On Freund所指出的,这对C++对象来说是不同的,因为
operator++()
是一个函数,编译器不知道要优化掉创建一个临时对象来保存中间值。++i
增加数值,然后返回。i++
返回该值,然后增加该值。这是一个微妙的区别。
对于一个for循环,使用
++i
,因为它稍快。i++
会创建一个额外的副本,然后被扔掉。++i
比i++
稍快的原因是i++
在增加i的值之前可能需要一个本地拷贝,而++i
从不这样做。在某些情况下,如果可能的话,一些编译器会把它优化掉......但这并不总是可能的,而且不是所有的编译器都这样做。我试着不太依赖编译器的优化,所以我会听从Ryan Fox的建议:当我可以同时使用两者时,我会使用
++i
。