2010-05-31 55 views
1

我有一個小疑問兩個if條件或一個,如果用OR

我有下面的代碼

bool res= false; 
if(cond1) 
{ 
    res = true; 
} 

if(cond2) 
{ 
    res = true; 
} 

取而代之的是,如果我把下面的代碼

if(cond1 || cond2) 
{ 
    res = true; 
} 

哪個代碼段是否更優化?

我相信這將是第二個,因爲我已經避免了If條件。

回答

9

嗯,我不知道它是否合適,但:在這種情況下,它不是事情

不要過多micro-optimizing

但要回答你的問題,堅持一個可讀的。

最快的解決辦法是這樣的:

bool res = cond1 || cond2; 
+1

更重要的是,它是最容易閱讀和理解的。 – mpen 2010-05-31 06:05:09

+0

if(cond1 || cond2)也避免了第二個條件 如果(cond1 | cond2)評估兩者,無論結果如何 – 2014-12-30 21:40:54

8

這是微型優化。選擇一個更具可讀性的文章:

return cond1 || cond2; 
+1

bool res = cond1 || COND2; :) – Amsakanna 2010-05-31 06:08:53

4

性能增益實際上並不明顯,但第二個比第一個更具可讀性和邏輯性。

+0

沒有性能收益。 – 2014-12-30 21:41:18

4

唯一的區別是在cond1爲真的情況下 - 所以int第二個例子cond2不會被測試。 如果cond1爲false cond2將在兩種情況下進行測試。

+1

這不是真的;在這兩種情況下cond2都不會被檢查,如果cond1持有 - 哪一個應該沒關係,但如果cond2是一個屬性,而不是一個字段,或者cond2有副作用(顫抖),那麼可能是因爲性能原因。 「||」運算符的這種行爲稱爲短路評估,並且是我能想到的所有語言的常態。 – 2010-05-31 06:16:10

+0

@Eamon在OP中的第一個代碼段中沒有'else',所以if子句和兩個測試都會執行。 – 2010-05-31 07:49:35

+0

啊 - 我誤解了,顯然... – 2010-05-31 10:56:29

0

第二選擇更加優化。 在第一個選項中,它會一直檢查cond2。 如果在option1中進行優化,則可以更改第二個參數。

0

這裏性能差異不會引人注意。但絕對是第二個更好。

1)可讀性好於第二。

2)第二個片段比第一個片段更具邏輯性。

3)如果我們看到ILILDASM那麼第一個代碼段的彙編行數將多於第二個代碼段的行數。所以,代碼大小更多的是第一個片段。如果裝配體的尺寸較小,則會更好。

0

如果cond1cond2都不是簡單的布爾值但具有副作用性質或功能則是因爲在第一個版本cond2將總是被評估和副作用會發生爲此的差。

1

太糟糕了,不是每個人都看到Or(|)和Condional Or(||)之間的區別。如果在第二個片段中使用Or,則沒有區別(兩個條件都被評估)。 使用條件或者,意味着如果第一個條件(從左到右)爲真,則下一個條件甚至沒有被評估。

這是一個非常有用的功能。

0

假設每個cond是約同樣可能是真實的假,並假設每個cond需要一個STU(顯著時間單位),那麼一半的時間||將採取1個STU和時間2 STU一半,對於整體的期望1.5 STU而不是2.

如果STU是納秒,那可能沒關係。

如果STU是一個世紀,它可能是。