我觉得C ++应该允许switch()
超过任何可以比较的类型,而不仅仅是整数类型。这似乎很奇怪:
switch(myEnum)
{
case myEnumValue1:
... break;
case myEnumValue1:
... break;
}
在语义上与:
相同if(myEnum == myEnumValue1)
...
else if(myEnum == myEnumValue2)
...
但这仅适用于整数类型。为什么?这种限制的目的是什么?
我理解编译器生成的switch
代码只能与整数或寄存器大小的类型兼容,但这些类型的东西通常都是开发人员的黑盒子。决定。这些事情通常是从我们这里抽象出来的。如果跳转表更好,编译器应生成一个。如果需要典型的if
/ else
算法,那就这样吧。
答案 0 :(得分:0)
switch语句是从C语言继承而来的,它本身就是在效率仍然令人担忧的神圣日子里设计的。是的,这很可能是因为它允许"计算得到",即跳转表。
比较序列确实可以替代,但对于长情况列表,散列可能是首选。不在这种早期语言的范围内。