我觉得C++应该允许switch()
超过任何可以比较的类型,而不仅仅是整数类型。看起来很奇怪的是:
switch(myEnum)
{
case myEnumValue1:
... break;
case myEnumValue1:
... break;
}
语义上与以下相同:
if(myEnum == myEnumValue1)
...
else if(myEnum == myEnumValue2)
...
但这仅适用于整数类型。为什么?这样的限制的目的是什么?
据我所知,编译器生成的代码switch
可能只与整数或寄存器大小的类型兼容,但这些类型的事情通常是开发人员决定中的黑盒。这些东西通常是从我们身上抽象出来的。如果跳转表更好,编译器应该生成一个。如果一个典型的if
/else
需要算法,就这样吧。
switch 语句继承自 C,它本身是在效率仍然受到关注的神圣时代设计的。是的,这很可能是因为它允许“计算的 goto”,即跳转表。
比较序列确实可以作为替代方案,但对于长案例列表,散列可能是首选。不属于这种早期语言的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)