4

例如,让我们考虑以下 2 个代码:

for (i = 0; i < 1000; i++)
{
   if ( i % 2 != 0)
   {
       continue;
   }
   else
   {
     ...  
   }    
}

for (i = 0; i < 1000; i++)
{
   if (i % 2 == 0)
   {
     ...  
   }    
}

两者都会导致相同的结果。那么使用哪一个呢?哪一个更好?两者之间是否存在显着的性能差异?让我们看看你们对此有何看法。我喜欢我在这里看到的关于这些事情的讨论。这可能会导致更好的代码编写和更好的执行时间。我发布了这个问题,因为我没有找到答案。如果我没有找到答案,我将来可能会发布另一个这样的帖子。

PS 当你可以不用它时,在循环中使用 continue 的目的是什么?

4

3 回答 3

5

在这个具体的例子中?continue使用任何东西都没有目的。

正如您所提到的,两个代码示例都产生完全相同的结果。而且两者都不会比另一个更快。

您应该根据可读性和清晰性做出更喜欢哪一个的决定,而不是某种类型的误导性“优化”尝试。考虑到这一点,第二个就更清楚了。我会认真质疑在真实代码库中使用第一个的人的编程能力。

作为基本准则,永远不要使用if-else单曲if何时可以使用。在这种情况下,您正在比较!=,然后用一个else语句找到它的反义词——这几乎就像说!(!=),它会产生双重否定。很难阅读或理解。通常,您应该尝试在语句中评估积极的条件if,而不是消极的条件,以防止这种情况发生。

而且确实没有理由发布与此类似的其他问题。所有的答案都是一样的。忽略任何可能的性能差异(如果甚至存在,考虑到优化编译器,这不太可能),并专注于哪个版本对您作为必须阅读它的人最有意义。请忽略任何给你相反建议的人。

于 2011-05-14T14:20:48.937 回答
0

我绝对不会考虑第一个选项,因为我认为它会在流程中添加不必要的代码路径。我不认为它会在性能方面带来更好的结果,但如果你想确保你可以检查 IL 代码。

于 2011-05-14T14:21:18.387 回答
0

没有足够的差异来证明使用丑陋的形式是合理的。

在这种特定情况下,比任何一个都好

For(i = 0; i < 1000; i+=2)
{
    ...    
}

因为根本不需要可分性检查。

于 2011-05-14T14:23:36.573 回答