c++ - Switch case 语句如何实现或在内部工作?

标签 c++ c gcc if-statement switch-statement

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

相关文章:

c++ - nullptr_t 是默认的可构造类型吗?

c - 将匿名参数传递给 C 中的函数

c++ - 全局类型转换运算符重载?

C++ STL : Duplicating code due to missing base-class for iterator and reverse_iterator

c - Marco 函数错误预期声明说明符或 '...' 之前的 '{' 标记

c - windows内存格式化问题

c++ - 使用 map 功能 ubuntu

c++ - ifstream 变量循环不打印任何内容

c - C-读取带空格的字符串

c - 警告 - 整数运算结果在 c 中超出范围