转换vs if-else效率

Rya*_*ing 8 if-statement go switch-statement

在围棋,switchES是比C(和C++)灵活得多,因为它们可以处理布尔表达式的情况下,更换大else- if梯看似完全,尤其是与默认switch {...}块.

switch {
    case x < 5 && y > 2:
        //...
    case y == 1 || x > 2:
        //...
    default:
}
Run Code Online (Sandbox Code Playgroud)

使用switchOver else- ifin Go 有效率优势吗?似乎switch灵活性会提高效率.是否只是由编译器来弄清楚它是否可以制作跳转表?

使用switchover ifelse?有任何性能优势吗?

Gre*_*ill 11

这完全取决于编译器,并为您的代码选择一个好的实现策略.通过请求编译器输出的汇编列表,您始终可以找出编译器生成的代码.请参阅Go编译器的-S选项.


sya*_*yam 10

除非你所有的case都是积分常数,否则你将失去转换switch为跳转表的可能性.

所以,如果你只使用积分常数,那么Go最好switch可能等同于C++ switch,但是否则它不会比它更有效if/else.