5

我在計算器上讀,使用切換和一樣糟糕嗎?

if(someCondition) 
{ 
    someCode(); 
} 
else 
{ 
    alternateCode(); 
} 

可能是低效由於易感性分支誤預測(參見this question例如)。

所以是switch -construct,例如,

switch (someCondition) 
{ 
    case (someCase): 
     something(); 
     break; 
    case (otherCase): 
     someOtherInstructions(); 
     break; 
    default: 
     defaultAction(); 
     break; 
} 

在這方面有什麼不同(除了我已經允許三種可能性的事實)?

+6

這是一個非常罕見的'昂貴'的定義!這就好像說$ 0.0001是昂貴的。 – Gabe

+1

@加貝:一如既往,這取決於應用程序。如果你需要花費0.0001億美元數十億次,它確實很重要(儘管我同意它幾乎不會是大部分成本)。 –

+0

@RodyOldenhuis:+1 – nobalG

回答

4

if語句不是「昂貴的」,條件分支可能是。問題不在於您選擇編寫的許多不同高級語句中的哪一個 - if,switch,for,while,。問題在於現代計算機在執行無條件指令路徑時工作得很好,但是當有決策點時,它們可能會放慢速度。既然在沒有決策點的情況下(,條件分支)你不能做任何有趣的計算,你可能會忽略高級語言結構的選擇。

+2

雖然switch語句不一定會編譯爲條件分支(請考慮跳轉表)。 – sepp2k

+1

我想這裏的主要觀點是,除非你正在運行一段代碼數千(或數百萬)次,否則不要擔心它...... –

+0

@ sepp2k同意。但這是一個編譯器決定,它可能取決於具體的值。無論如何,重點不是「如果與切換」,它是「有條件的分支預測」。 –