Jos*_*ega 10 c c++ if-statement compilation switch-statement
我想知道以下代码编译成程序集的方式是否有任何不同.我听说switch-case比if else更有效,但在这个例子中我不太确定是否会出现这种情况.
if(x==1){
...
}else if(x==2){
...
}else{
...
}
Run Code Online (Sandbox Code Playgroud)
和
switch(x){
case 1:
...
break;
case 2:
...
break;
default:
...
}
Run Code Online (Sandbox Code Playgroud)
小智 10
如果条目是连续的(或几乎是这样),编译器有时会将开关转换为跳转表.或者它理论上可以使用二进制搜索来查找案例而不是线性系列测试,如果您有大量案例,这将更快.
另一方面,没有什么能阻止编译器对转换为if/else的相同代码进行相同的优化.
所以在一个好的编译器上,在某些情况下切换会更快.在一个非常好的编译器上,它们是相同的.
在这种特定情况下,switch可以将其转变为跳转表。如果编译器可以判断子句之间没有改变(通常是这种情况,除非是或其他东西),则该语句(如果if您将其写=为==:-P)仍然可以做同样的事情。xifxvolatile
| 归档时间: |
|
| 查看次数: |
39103 次 |
| 最近记录: |