Java
,c++
,c
,c#
等语言允许integral
类型或在switch-case语句中求值为整数类型的表达式。某些语言允许使用[string
文字和其他一些类型]
为什么我们只需要使用integral
类型或某些有限数量的类型而不是double
,float
类型?是否因为某种优化< / strong>或仅用于简单?
答案 0 :(得分:16)
首先,Java 7允许切换字符串值...... C#也是如此。 (在Java中,你无法切换long
...感谢提醒我彼得。)
但是,不允许切换float
和double
的原因很可能是舍入错误和浮点数不精确表示的阴险效应会使得使用浮点交换机的代码非常容易出错......或者需要一种特殊的语法来表达case
值中的错误界限。
现在,如果有很多用于切换浮点值的好用例,那么可以预期某些语言会支持这种情况。但据我所知,没有主流编程语言会沿着这条路走下去。
答案 1 :(得分:5)
对于C ++,这是因为switch
/ case
不应该复制if
的功能。如果在代码允许的情况下,它应该提供一种获得有效“跳转表”的方法。