2011-09-03 169 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

:第二個是「或」型