这取决于代码是什么以及有多少。好的编译器有各种用于优化 switch 语句的技巧,其中一些他们不会使用直接的 if/then 语句。大多数人都足够聪明,可以进行简单的数学运算或使用查找/跳转表来处理案例 0、1、2 或案例 3、6、9 等情况。
当然有些没有,而且许多很容易被不寻常或不规则的价值观集所挫败。此外,如果处理多个案例的代码看起来非常相似,那么剪切和粘贴可能会导致维护问题。如果您有很多代码,但可以通过算法将它们分成几组,您可以考虑几个/嵌套的 switch 语句,例如,而不是:
switch (code) {
case 0x0001: ...
case 0x0002: ...
...
case 0x8001: ...
case 0x8002: ...
...
}
您可能会使用:
if (code & 0x8000) {
code &= ~0x8000;
switch (code) {
case 0x0001: ... // actually 0x8001
case 0x0002: ... // actually 0x8002
...
}
}
else {
switch (code) {
case 0x0001: ...
case 0x0002: ...
...
}
}
许多语言解释器以这种方式解码操作码,因为单字节操作码可能将附加信息打包到不同的位中,并且转录所有可能的组合及其处理程序将是重复且脆弱的。另一方面,过多的位修改可能会破坏编译器的任何优化并适得其反。
除非您确定这是一个真正的性能瓶颈,否则我会避免过早的优化:无论采用哪种方式都会让您觉得相当健壮且可以快速实施。如果您的应用程序运行得太慢,请对其进行分析并进行相应的优化。