我在某处读到 switch
语句使用“二进制搜索”或一些排序技术来准确选择正确的大小写,与 else-if 阶梯相比,这提高了它的性能。
此外,如果我们按顺序给出案例,开关是否工作得更快?是这样吗?您能对此提出宝贵的建议吗?
我们讨论了here大致相同,并计划作为问题发布。
最佳答案
switch
语句如何在代码中实现实际上取决于编译器。
不过,我的理解是在合适的时候(也就是比较密集的情况),使用跳转表。
这意味着类似:
switch(i) {
case 0: doZero(); break;
case 1: doOne();
case 2: doTwo(); break;
default: doDefault();
}
最终会被编译成类似的东西(可怕的伪汇编器,但我希望它应该很清楚)。
load i into REG
compare REG to 2
if greater, jmp to DEFAULT
compare REG to 0
if less jmp to DEFAULT
jmp to table[REG]
data table
ZERO
ONE
TWO
end data
ZERO: call doZero
jmp END
ONE: call doOne
TWO: call doTwo
jmp END
DEFAULT: call doDefault
END:
如果不是这种情况,还有其他可能的实现允许某种程度的“优于一系列条件”。
关于c++ - Switch case 语句如何在内部实现或工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14067547/