【问题标题】:why only limited types allowed in switch case statements为什么在 switch case 语句中只允许有限的类型
【发布时间】:2013-01-14 10:21:32
【问题描述】:

Java,c++,c,c# 等语言允许 integral 类型或在 switch-case 语句中计算为整数类型的表达式。[string 文字和其他一些类型是在某些语言中允许]

为什么我们只需要使用integral 类型或有限数量的类型而不是doublefloat 之类的类型?是因为某种优化还是仅仅为了简单

【问题讨论】:

  • C# 不是这种情况 (heh) - 它允许 bool、char、string、integral、enum 或相应的可空类型。 (所以...我猜string 是那里唯一真正出色的人。)
  • 这不正确。例如,C# 允许字符串。字符串不是整数类型。
  • Java 7 还允许在 switch/case 中使用字符串。
  • switch-case with double 表达式将等同于只执行 default 部分,因为舍入错误。那么为什么要浪费键盘输入开关/外壳呢?
  • @TadeuszKopec:它不会是等价的——双精度值比较相等是可能,所以默认值不会必然采取。但就像你说的,浮点类型的相等比较可能会被舍入错误破坏。

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


【解决方案1】:

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

但是,不允许打开floatdouble 的原因很可能是舍入错误和浮点数的不精确表示的阴险影响会使使用浮点开关的代码非常容易出错.. . 或需要特殊语法来表达case 值中的错误界限。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 2011-07-24
      • 1970-01-01
      • 2011-02-12
      • 2020-09-05
      相关资源
      最近更新 更多