gpt4 book ai didi

c++ - "default"switch case 是否会影响跳转表优化?

转载 作者:可可西里 更新时间:2023-11-01 15:19:33 24 4
gpt4 key购买 nike

在我的代码中,我习惯于编写包含如下断言的回退默认情况,以防止我在语义发生变化时忘记更新开关

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

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

处理此问题的最佳方法是什么?一些 friend 建议我用空指针解除引用替换“ADummyValue”,这样编译器在出现未定义行为时可以忽略对缺少返回语句的警告。有没有更好的方法来解决这个问题?

最佳答案

如果您的编译器是 MSVC,您可以使用 __assume intrinsic : http://msdn.microsoft.com/en-us/library/1b3fsfxw(v=VS.80).aspx

关于c++ - "default"switch case 是否会影响跳转表优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com