亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么要使用switch語句而不是if-else?

為什么要使用switch語句而不是if-else?

人到中年有點甜 2019-12-21 13:00:05
我一直想知道這已經有一段時間了。到目前為止,我不是一個頑固的程序員,主要是小型Python腳本,并且已經編寫了一些分子動力學模擬。對于真正的問題:switch語句的意義是什么?為什么不能只使用if-else語句?感謝您的回答,如果您之前曾被問過,請指向我的鏈接。S.Lott指出,這可能是If / Else vs. Switch問題的重復。如果要關閉,請關閉。我將其開放以供進一步討論。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

甲開關構建體更容易地轉換成一個跳躍(或分支)表。當案例標簽靠在一起時,這可使switch語句比if-else效率更高。這個想法是將一堆跳轉指令順序地放在內存中,然后將其值添加到程序計數器中。這將一系列比較指令替換為加法運算。


以下是一些極為簡化的偽裝配件示例。首先,if-else版本:


    // C version

    if (1 == value)

        function1();

    else if (2 == value)

        function2();

    else if (3 == value)

        function3();


    // assembly version

    compare value, 1

    jump if zero label1

    compare value, 2

    jump if zero label2

    compare value, 3

    jump if zero label3

label1:

    call function1

label2:

    call function2

label3:

    call function3

接下來是交換機版本:


    // C version

    switch (value) {

    case 1: function1(); break;

    case 2: function2(); break;

    case 3: function3(); break;

    }


    // assembly version

    add program_counter, value

    call function1

    call function2

    call function3

您可以看到生成的匯編代碼更加緊湊。請注意,需要以某種方式轉換該值以處理除1、2和3以外的其他值。但是,這應該可以說明該概念。


查看完整回答
反對 回復 2019-12-21
?
DIEA

TA貢獻1820條經驗 獲得超3個贊

我忽略了通常不重要的這種低級優化類型,并且可能因編譯器而異。

我想說的主要區別是可讀性。if / else非常靈活,但是當您看到一個開關時,您立即知道所有測試都針對同一個表達式。


查看完整回答
反對 回復 2019-12-21
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

為了表現力,switch / case語句允許您將多個案例組合在一起,例如:


case 1,2,3: do(this); break;

case 4,5,6: do(that); break;

為了提高性能,編譯器有時可以將switch語句優化為跳轉表。


查看完整回答
反對 回復 2019-12-21
  • 3 回答
  • 0 關注
  • 1096 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號