++ 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。

回答

请不要担心其中一个更快的"效率"(速度)。这些天,我们有负责这些事情的编译器。使用任何一种有意义的方法,在此基础上可以更清楚地表明意图。