切换语句vs if语句,哪个性能更好?

时间:2011-11-30 15:24:18

标签: java c++ performance coding-style

  

可能重复:
  If vs. Switch Speed

我将使用c ++作为例子,但我提出的问题不是针对特定语言。我的意思是一般的。哪一个更适合性能?这不是关于编程风格的问题。

当然,在某些情况下,switch语句可能比if语句更容易使用。但如果你想要MAXIMUM表现。就像有数千行代码和10多个switch语句可以用if语句替换,哪一个会导致更好的性能呢?

示例:

if(x == 6){
do this
}

if(x == 67){
do this * 2
}

if(x == 9000){
do this * 3
}

VS

//Please forgive me if the syntax for the switch statement is wrong, I haven't use one in any programming language for a long time
Switch(x){
case 6:
    do this

case 67:
    do this * 2

case 9000:
    do this * 3
}

那么这在绩效方面有何不同?当您回答时,请确保您的答案包含您所指的编程语言。如果在java中,说明你在谈论java而不是c ++,javascript,无论你选择什么语言来回答我的问题。

3 个答案:

答案 0 :(得分:4)

切换可以(取决于实现)使用跳转表(在c和c ++中),因此在某些条件下它可能更高性能。一般来说,它表明你的意图更清晰,所以编译器可以假装它很聪明。

考虑到您示例中的if甚至不使用else if链,它会使switch更快(因为没有评估所有条件)可能会更改代码的含义(如果您的dothises修改x)。

答案 1 :(得分:1)

嗯,如上所述:If vs. Switch Speed和此处:Advantage of switch over if-else statement

因此,在某些情况下,由于编译器能够优化一点,实际上切换比许多链式if-else语句更快。

答案 2 :(得分:1)

通常,如果您有一个非常具体的值/操作列表,则可以这样做。由于能够根据已知的编译时间值创建跳转表,因此在大多数情况下切换可能会更快一些。但是,在某些特定情况下,您可以使用switch语句来专门提高性能,例如Duff's Device