相关疑难解决方法(0)

"默认"开关案例会干扰跳转表优化吗?

在我的代码中,我习惯于编写包含如下所述断言的后备默认情况,以防止在语义变化的情况下忘记更新开关

switch(mode) {
case ModeA: ... ;
case ModeB: ... ;
case .. /* many of them ... */
default: {
  assert(0 && "Unknown mode!");
  return ADummyValue();
}
};
Run Code Online (Sandbox Code Playgroud)

现在我想知道人工回落检查默认情况是否会干扰跳表生成?想象一下,"ModeA"和"ModeB"等是连续的,所以编译器可以优化成一个表.由于"默认"情况包含一个实际的"返回"语句(因为断言将在发布模式中消失,并且编译器会抱怨缺少返回语句),编译器似乎不太可能优化默认分支.

处理这个问题的最佳方法是什么?有些朋友建议我用空指针取消引用替换"ADummyValue",以便编译器在存在未定义的行为时可以省略警告缺少返回语句.有没有更好的方法来解决这个问题?

c++ switch-statement jump-table

11
推荐指数
1
解决办法
1727
查看次数

标签 统计

c++ ×1

jump-table ×1

switch-statement ×1