我在某处读到,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/42986191/