【发布时间】:2014-04-21 11:31:56
【问题描述】:
下面两个代码sn-ps,根据编译或运行的速度,实际上有什么不同吗?
for (int i = 0; i < 50; i++)
{
if (i % 3 == 0)
continue;
printf("Yay");
}
和
for (int i = 0; i < 50; i++)
{
if (i % 3 != 0)
printf("Yay");
}
就个人而言,在不仅仅是打印语句的情况下,我一直使用第一种方法来减少包含代码的缩进量。一直在想,所以发现它的时候我问它是否真的有视觉以外的效果。
回复 Alf(我无法让代码在 cmets 中工作...)
对我的用法更准确的是类似于“handleObjectMovement”函数的内容,其中包括
for each object
if object position is static
continue
deal with velocity and jazz
对比
for each object
if object position is not static
deal with velocity and jazz
因此我不使用返回。本质上是“如果它与本次迭代无关,请继续”
【问题讨论】:
-
我认为首先在函数中处理琐碎的情况或错误情况,使用
return纾困,是可以的。但是continue的意思是代码的读者必须用额外的精力去分析。请记住,编写源代码并不是要向编译器传达它应该做什么,而是要向他人或后来的自己传达你的意图是什么。 -
一个好的编译器应该将等效的源代码优化为相同的汇编代码。在任何特定情况下是否真的发生这种情况取决于太多事情需要事先确定。那你为什么不自己检查一下呢?检查生成的程序集和/或测量时间,您就会得到答案。
-
Branko 有两个原因,第一个很糟糕,但第二个我觉得很好:P 1) 我很懒 2) 用谷歌搜索这类问题很有用。现在任何想知道他们是否相同的人都有一个他们可以访问的 SO 页面。
-
Alf,我编辑了我的帖子以说明为什么 continue 是相关的,而 return 不是。谢谢大家的回复。
标签: c++ compiler-optimization continue