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

时间:2013-01-14 10:21:32

标签: c# java c++ switch-statement

Javac++cc#等语言允许integral类型或在switch-case语句中求值为整数类型的表达式。某些语言允许使用[string文字和其他一些类型]

为什么我们只需要使用integral类型或某些有限数量的类型而不是doublefloat类型?是否因为某种优化< / strong>或仅用于简单

2 个答案:

答案 0 :(得分:16)

首先,Java 7允许切换字符串值...... C#也是如此。 (在Java中,你无法切换long ...感谢提醒我彼得。)

但是,不允许切换floatdouble的原因很可能是舍入错误和浮点数不精确表示的阴险效应会使得使用浮点交换机的代码非常容易出错......或者需要一种特殊的语法来表达case值中的错误界限。

现在,如果有很多用于切换浮点值的好用例,那么可以预期某些语言会支持这种情况。但据我所知,没有主流编程语言会沿着这条路走下去。

答案 1 :(得分:5)

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