2011-09-03 91 views

回答

1

不同之处在于,在第二种情况下,仅对条件进行检查和计算一次。

+0

你是不是指使用if-else的第二种情况? – greatwolf

+0

@Victor,ayee,你是对的。 – Gleno

+0

如果第二种情况是elseif声明怎么办? – ddd

2

在实践中,优化器将可能使他们完全一样。在这些情况下做的最好的事情就是尝试一下 - 查看编译器的汇编输出,并且您将看到它们的区别。

+0

您不可忽视的现代编译器优化取消多余的支票?整洁的...... **编辑**等等,没办法,cout和<<可以用一些欺骗来修改x:es内存,那么编译器怎么知道提前发生了什么? Oyy的! – Gleno

+0

@Gleno,在这种情况下你可能是对的。让我快速检查一下。 –

+0

在这个例子中,它们不会以相同的方式结束,这是肯定的。即使在我的'-Oz'情况下也有两个比较。无论如何,答案的重要部分是“去看看,你可以找到”。 –

0

在第一个例子中,两者都被评估,总是。

在第二个例子中,如果第一个是真的,它永远不会秒。

+0

我和你在一起。我不知道C++如何优化这一点,因为所有的别名问题...> _ < – Gleno

0

最重要的区别(在我看来)是第一种形式很难阅读,而且更容易出错。

第二种形式更像英文:“如果x是10,那么做,否则做”,而第一种形式基本上使两个子句无关。这很容易出错,因为如果你决定需要改变阈值10,那么你需要在两个地方更新它,而不仅仅是一个。

就执行速度而言,如果完全不同,我会感到非常惊讶。第一种形式会有两种评估,但这是最少的问题。这当然不是你应该浪费时间优化的事情。

0

没有可见的输出差异。但是,它使你的代码更容易,如果你使用的梯子来读取一个

0

如果(X == 10)//只匹配,如果x为数字10,然后处理器跳转到下一行即

如果( X!= 10)//只匹配如果x不是数10

其中作为 其他如果只检查,如果数字是10或其他任何东西,然后10

在某种程度上都将导致相同,但它只是陈述的问题。

所以

    在第一示例
  • ,如果将在第二示例中执行
  • 的两条线的任一个被执行

所以它能够更好地使用性能第二个

0

从维修性的角度来看第一个

  • 违反了DRY原则。
  • 很难理解和修改。不是像这里那样有一个微不足道的条件,但是如果条件不错,你将不得不削减'粘贴条件并拍打!在前面,或者尝试记住De Morgan's laws是如何制定的...有一天,将失败,倒立如果将不能成为第一个相反的......

所以,else是要走的路。

0

在第一个块中if语句将由编译器运行...... 但是int第二个语句只会运行1个语句,因为两个语句都与单个条件链接。无论是否能够真实,否则可真

你可以理解这是考虑到一日一为“和” type

:第二个是“或”型