【问题标题】:strongly typed C++0x enumeration comparison强类型 C++0x 枚举比较
【发布时间】:2011-03-03 02:52:28
【问题描述】:

为什么强类型 C++0x 枚举的实例不能相互比较?


更新:它们在 gcc 4.6 中具有可比性;我不确定它是否适用于 gcc 4.4。

【问题讨论】:

  • 因为它是强类型的:)
  • 我认为真正的问题是“强类型是什么意思?”。
  • 另外,为了捍卫我的问题,默认定义比较运算符也不会很疯狂,因为枚举是基于整数类型的,这是可比较的。用户定义的行为,或者没有比较,仍然是可能的,尽管我认为这是一种罕见的情况。
  • @NeilG:但强类型枚举的全部意义在于防止意外误用。使用类型系统的优势与高级 C++ 循环中的罕见情况完全相反,如果您想启用需要比较苹果和橙子的非常罕见的情况,您可以通过编写自己的比较运算符来实现。还是你问为什么没有一种弱类型枚举?

标签: c++ enums c++11 enum-class


【解决方案1】:

如果你使用强类型枚举,这就像让你的枚举成为一个真正的类型,一个类。然后它遵循与类相同的规则。

默认情况下,不同类的实例不能相互比较。您必须定义一个比较函数(或成员函数)以使它们具有可比性。

因此,将枚举设为强类型使其遵循同样的规则。

【讨论】:

  • 如果无法与另一个进行比较,我认为枚举没有任何用处。 IMO,比较 same 类型的枚举实例是 not 滥用。
  • @balki 我不明白你的评论。 enum 类不禁止 enum 与相同类型的比较,它禁止与其他类型的比较。我会添加一个精度,以防不清楚。
  • 是的。但问题是关于相同类型的枚举。不过现在问题和答案都很清楚了。
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 2011-05-28
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
相关资源
最近更新 更多