Java
, c++
,c
等语言c#
允许integral
在 switch-case 语句中使用类型或计算为整数类型的表达式。[string
在某些语言中允许使用文字和其他一些类型]
为什么我们需要只使用integral
类型或一些有限数量的类型而不是类型double
,例如float
?是因为某种优化还是只是为了简单?
Java
, c++
,c
等语言c#
允许integral
在 switch-case 语句中使用类型或计算为整数类型的表达式。[string
在某些语言中允许使用文字和其他一些类型]
为什么我们需要只使用integral
类型或一些有限数量的类型而不是类型double
,例如float
?是因为某种优化还是只是为了简单?
首先,Java 7 允许切换字符串值……C# 也是如此。(在 Java 中,你不能打开long
...谢谢你提醒我彼得。)
float
但是,不允许打开和打开的原因double
很可能是舍入错误和浮点数的不精确表示的阴险影响会使使用浮点开关的代码非常容易出错......或者需要特殊的语法来表达错误值的界限case
。
现在,如果有很多好的用例来切换浮点值,那么人们会期望某些语言会支持这一点。但据我所知,没有主流编程语言曾经走这条路。
在 C++ 的情况下,这是因为switch
/case
不应该复制if
. 如果它应该提供一种在代码允许的情况下获得有效“跳转表”的方法。