switch case vs if else
switch case vs if else
我想知道以下代码编译成程序集的方式是否有什么不同。我听说switch情况比其他情况更有效,但在这个例子中,我不太确定是否会是这样。
if(x==1){
...
}else if(x==2){
...
}else{
...
}
和
switch(x){
case 1:
...
break;
case 2:
...
break;
default:
...
}
如果条目是连续的(或几乎是连续的),编译器有时会将开关转换为跳转表。或者,理论上它可以使用二进制搜索来找到案例,而不是线性的一系列测试,如果你有大量的案例,这会更快。
另一方面,没有什么可以阻止编译器对转换为if/else的同一代码进行同样的优化。
因此,在一个好的编译器上,在某些情况下切换会更快。在一个非常好的编译器上,它们是一样的。
在这种特定情况下,switch
可以变成一个跳转表。如果编译器可以判断x
在if
子句之间没有变化(通常情况下,除非x
是volatile
或其他什么),那么if
语句(如果您将=
写成==
:-P)仍然可以做同样的事情。
请注意,如果您知道某些情况比其他情况更有可能,那么if/else构造可能会更高效。
相关文章:
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 我需要把 constexpr 放在 else-if 之后吗?
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- 如何在 C++17 中将 "else-if" 与初始值设定项一起使用?
- if, else if, else 函数未准确显示结果
- 使用 if/else if 的函数输出问题
- 需要消除这些"else if"并优化代码
- 不必要的 else 语句:当可以使用 IF 时,使用 ELSE IF 有什么缺点吗?
- MQL4:我的if/else if liop只有一半导致当前执行
- 如何在 else-if 语句中正确使用 or 语句 (||)
- if else-if else 语句 c++ 的替代项
- 具有"else if"方法问题 C++ 的基本计算器
- 如果/else-if语句将如何处理此操作
- If和else-If语句.它是如何在下面的代码中工作的
- 优化代码/实现"for"循环而不是长"if - else if - else"
- "if"块没有大括号,使后续"else if"嵌套
- 试图编写一个只使用if和else-if语句对两个数字进行排序的程序
- if else-if梯形图和编译器优化
- C++在else/if中声明一个优先级队列