c++ - 开关盒 vs if else

标签 c++ c if-statement compilation switch-statement

<分区>

我想知道下面的代码编译成汇编的方式是否有什么不同。我听说 switch-case 比 if else 更有效,但在这个例子中我不太确定情况是否如此。

if(x==1){
...
}else if(x==2){
...
}else{
...
}

switch(x){
 case 1:
 ...
 break;

 case 2:
 ...
 break;

 default:
 ...
}

最佳答案

如果条目是连续的(或接近连续的),编译器有时会将开关转换为跳转表。或者理论上它可以使用二分搜索来查找案例而不是线性系列测试,如果您有大量案例,这会更快。

另一方面,没有什么可以阻止编译器对转换为 if/else 的相同代码进行相同的优化。

所以在一个好的编译器上,switch 在某些情况下会更快。在一个非常好的编译器上,它们是相同的。

关于c++ - 开关盒 vs if else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/195802/

相关文章:

c++ - 在调用 C++ 运算符重载时识别调用上下文/用法

c++ - Borland C++ 中的 Kiss fft 链接器错误

c++ - 如何通过常数优化数组乘法?

java - C#/Java如何存储二维数组,与C++有何不同?

macos - Mac Bash - 无法识别 if[$#=0]

c# - C# 中的 if (string) 与 if (bool)

c++ - 数组+整数的指针 (C++)

C 程序 - While 循环

c - 如何在 C 中清除文件的全部内容?

c# - 是否有更有效的方法来编写使用 DateTime 值的 IF 语句?