首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开关语句与if语句,哪种语句的性能更好?

开关语句与if语句,哪种语句的性能更好?
EN

Stack Overflow用户
提问于 2011-11-30 15:24:17
回答 5查看 5.5K关注 0票数 0

可能重复: 中频与开关速度

我将以c++为例,但我提出的问题并不是针对特定的语言。我是说总的来说。哪一种表现更好?这不是一个关于编程风格的问题。

当然,在某些情况下,开关语句可能比if语句更容易使用。但如果你想要最大限度的表现。比如,如果有数千行代码和超过10个可以被if语句替换的switch语句,那么哪个语句会带来更好的性能?

示例:

代码语言:javascript
复制
if(x == 6){
do this
}

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

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

代码语言:javascript
复制
//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,无论您选择哪种语言来回答我的问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-30 15:26:33

开关可能(取决于实现)使用跳转表(在c和c++中),因此在某些条件下,它可能具有更高的性能。通常,它会更清楚地说明您的意图,这样编译器就可以假装它很聪明。

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

票数 4
EN

Stack Overflow用户

发布于 2011-11-30 15:28:45

好吧,就像这里说的:中频与开关速度切换if-else语句的优点

因此,实际上,在某些情况下,由于编译器能够优化一些,所以开关比很多链式if-else语句都要快。

票数 1
EN

Stack Overflow用户

发布于 2011-11-30 15:28:52

使用C++,开关语句比多个if语句执行速度更快。这是因为编译器能够优化开关语句,但是对于多个if,代码必须按照程序员设置的顺序处理每个if语句。使用switch语句,它不依赖于前面的情况,因此编译器能够以一种使其更快执行的方式重新排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8328321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档