C ++开关仅适用于整数类型的基本原理是什么?

时间:2015-02-05 09:40:05

标签: c++ syntax switch-statement

我觉得C ++应该允许switch()超过任何可以比较的类型,而不仅仅是整数类型。这似乎很奇怪:

switch(myEnum)
{
    case myEnumValue1:
        ... break;
    case myEnumValue1:
        ... break;
}

在语义上与:

相同
if(myEnum == myEnumValue1)
    ...
else if(myEnum == myEnumValue2)
    ...

但这仅适用于整数类型。为什么?这种限制的目的是什么?

我理解编译器生成的switch代码只能与整数或寄存器大小的类型兼容,但这些类型的东西通常都是开发人员的黑盒子。决定。这些事情通常是从我们这里抽象出来的。如果跳转表更好,编译器应生成一个。如果需要典型的if / else算法,那就这样吧。

1 个答案:

答案 0 :(得分:0)

switch语句是从C语言继承而来的,它本身就是在效率仍然令人担忧的神圣日子里设计的。是的,这很可能是因为它允许"计算得到",即跳转表。

比较序列确实可以替代,但对于长情况列表,散列可能是首选。不在这种早期语言的范围内。