为什么在switch case语句中只允许有限的类型?

本文关键字:类型 switch case 语句 为什么 | 更新日期: 2023-09-27 17:53:06

Java, c++, c, c#这样的语言允许integral类型或在切换大小写语句中计算为整型的表达式。[string字面值和一些其他类型在某些语言中是允许的]

为什么我们只需要使用integral类型或一些有限的类型,而不使用double, float类型,是因为某种优化还是仅仅为了简单性?

为什么在switch case语句中只允许有限的类型?

首先,Java 7允许切换字符串值…c#也是如此。(在Java中,不能打开long…谢谢你提醒我,彼得)

然而,不允许切换floatdouble的原因很可能是舍入误差和浮点数不精确表示的潜在影响会使使用浮点开关的代码非常容易出错…或者需要一种特殊的语法来表达case值中的错误边界。

现在,如果有很多切换浮点值的好用例,那么人们会期望一些语言会支持这一点。但据我所知,还没有主流的编程语言沿着这条路走下去。

在c++的情况下,这是因为switch/case不应该复制if的功能。如果它应该在代码允许的情况下提供一种获得有效"跳转表"的方法