为什么要使用switch语句而不是if-else?

我一直想知道这已经有一段时间了。到目前为止,我不是一个顽固的程序员,主要是小型Python脚本,并且已经编写了一些分子动力学模拟。对于真正的问题:switch语句的意义是什么?为什么不能只使用if-else语句?

感谢您的回答,如果您之前曾被问过,请指向我的链接。

S.Lott指出,这可能是If / Else vs. Switch问题的重复。如果要关闭,请关闭。我将其开放以供进一步讨论。


人到中年有点甜
浏览 936回答 3
3回答

qq_花开花谢_0

甲开关构建体更容易地转换成一个跳跃(或分支)表。当案例标签靠在一起时,这可使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 label3label1:    call function1label2:    call function2label3:    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以外的其他值。但是,这应该可以说明该概念。

DIEA

我忽略了通常不重要的这种低级优化类型,并且可能因编译器而异。我想说的主要区别是可读性。if / else非常灵活,但是当您看到一个开关时,您立即知道所有测试都针对同一个表达式。

蝴蝶不菲

为了表现力,switch / case语句允许您将多个案例组合在一起,例如:case 1,2,3: do(this); break;case 4,5,6: do(that); break;为了提高性能,编译器有时可以将switch语句优化为跳转表。
打开App,查看更多内容
随时随地看视频慕课网APP