switch case vs if else
本问题已经有最佳答案,请猛点这里访问。
我想知道以下代码编译到程序集中的方式是否有什么不同。我听说交换箱比其他的更有效,但是在这个例子中,我不太确定是否会是这样。
1 2 3 4 5 6 7 | if(x==1){ ... }else if(x==2){ ... }else{ ... } |
和
1 2 3 4 5 6 7 8 9 10 11 12 | switch(x){ case 1: ... break; case 2: ... break; default: ... } |
如果条目是连续的(或几乎是连续的),编译器有时会将开关转换为跳转表。或者理论上,它可以使用二进制搜索来查找案例,而不是线性的一系列测试,如果有大量案例的话,这将更快。
另一方面,没有什么能阻止编译器对转换为if/else的同一代码进行相同的优化。
因此,在一个好的编译器上,在某些情况下切换速度可能更快。在一个非常好的编译器上,它们是相同的。
也请注意,如果您知道某些情况比其他情况更可能发生,if/else构造可能更有效。
在这种特定的情况下,