++ i和i ++有什么区别?
时间:2020-03-05 18:42:32 来源:igfitidea点击:
在C语言中,使用++ i和i ++有什么区别,应该在for循环的增量块中使用哪个?
解决方案
回答
++ i
增加值,然后返回它。
" i ++"返回该值,然后将其递增。
这是一个微妙的区别。
对于for循环,请使用++ i
,因为它稍快一些。 " i ++"将创建一个多余的副本,该副本将被丢弃。
回答
- " ++ i"将递增" i"的值,然后返回递增后的值。
i = 1; j = ++i; (i is 2, j is 2)
- " i ++"将增加" i"的值,但返回" i"在增加之前保持的原始值。
i = 1; j = i++; (i is 2, j is 1)
对于for
循环,两者都有效。 ++++似乎更常见,也许是因为那是K&R中使用的。
无论如何,请遵循准则"比起i ++优先考虑++ i",我们不会出错。
关于++ i和i ++的效率,有很多评论。在任何非学生项目的编译器中,都不会有性能差异。我们可以通过查看生成的代码来验证这一点,这将是相同的。
效率问题很有趣...这是我的一个答案:
C语言中的i ++和++ i之间是否存在性能差异?
正如On Freund所指出的,对于C ++对象,这是不同的,因为operator ++()
是一个函数,并且编译器不知道如何优化临时对象的创建以保存中间值。
回答
++ i可能比i ++快一点的原因是,i ++在递增i之前可能需要i值的本地副本,而++ i从不要求。在某些情况下,某些编译器会在可能的情况下对其进行优化……但并非总是如此,并非所有编译器都这样做。
我尽量不要过分依赖编译器的优化,所以我会遵循Ryan Fox的建议:当我可以同时使用两者时,我会使用++ i。
回答
请不要担心其中一个更快的"效率"(速度)。这些天,我们有负责这些事情的编译器。使用任何一种有意义的方法,在此基础上可以更清楚地表明意图。