继续循环内部if语句与使用循环内if语句的否定

时间:2011-05-14 14:15:29

标签: optimization loops syntax execution continue

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

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

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

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

P.S。什么是在没有它的情况下继续使用循环的目的是什么?

3 个答案:

答案 0 :(得分:5)

在这个具体的例子中?使用continue没有任何意义。

正如您所提到的,两个代码示例都会产生完全相同的结果。并且它们都不会比另一个快得多。

您决定选择哪一个应该基于可读性和清晰度,而不是某种误导的“优化”尝试。考虑到这一点,第二个是更清晰。我真的质疑在实际代码库中使用第一个的人的编程方法。

作为基本准则,当单个if-else执行时,请勿使用if。在这种情况下,您要比较!=,然后使用else语句查找相反的内容 - 这几乎就像说!(!=),这会产生双重否定。很难阅读或理解。一般来说,您应该尝试在if语句中评估条件,而不是消极的条件,以防止这种情况。

并且没有理由发布与此类似的其他问题。所有答案都是一样的。忽略任何可能的性能差异(如果一个甚至存在,这是非常不可能的,给定优化编译器),并关注哪个版本最适合作为必须阅读它的人。请忽略任何向您提供相反建议的人。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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

比这个特定实例中的任何一个都好

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

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