簡體   English   中英

兩個條件,或一個條件或

[英]Two if conditions or one if with OR

我有一個小疑問

我有以下代碼

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

if(cond2)
{
   res = true;
}

如果我放置以下代碼,則代替此

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

哪個代碼段將更優化?

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

好吧,我不知道是否合適,但是:在這種情況下,這並不重要

不要過多地進行微優化

但是要回答您的問題,請堅持使用易於理解的問題。

最快的解決方案是這樣的:

bool res = cond1 || cond2;

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

return cond1 || cond2;

性能提升確實不會引起注意,但是第二個比第一個更具可讀性和邏輯性。

唯一的區別是在cond1為true的情況下-因此,不會測試第二個示例cond2。 如果cond1為false,則將在兩種情況下都對cond2進行測試。

不幸的是,不是每個人都看到Or(|)和Condional Or(||)之間的區別。 如果在第二個片段中使用“或”,則沒有區別(兩個條件都被評估)。 使用“條件或”表示如果第一個條件(從左到右)為真,則甚至不評估下一個條件。

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

第二個選項更加優化。 在第一個選項中,它將始終檢查cond2。 您可以在option1中將if改為else來進行優化。

這里的性能差異不會很明顯。但是肯定第二個更好。

1)可讀性更好。

2)第二個片段比第一個更合乎邏輯。

3)如果我們看到ILILDASM然后在組裝線的第一個片段的數量會比第二個更。 因此,第一個代碼段的代碼大小更大。 裝配的尺寸越小越好。

如果cond1cond2不是簡單的布爾值,而是具有副作用的屬性或函數,則存在差異,因為在第一個版本中,將始終評估cond2並因此發生副作用。

假設每個cond真假cond大致相等,並假設每個cond占用一個STU(有效時間單位),則|| 總體預期為1.5 STU,而不是2,這將花費1 STU,而一半時間是2 STU。

如果STU是十億分之一秒,則可能無關緊要。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM