具有相同值的枚举类型

时间:2011-09-13 08:33:27

标签: c++

为什么在C ++中不允许声明在同一块中具有相同值的两个枚举类型?

enum math_students {A,B,C};
enum comp_students {D,E,A}; // illegal

4 个答案:

答案 0 :(得分:3)

枚举中的值不是作用域。枚举的成员可以通过其名称直接访问。因此,如果多个枚举具有相同名称的成员,则会出现命名冲突。

答案 1 :(得分:3)

C ++ 03 enum在其范围下没有更严格的类型检查。因此,math_students::Acomp_students::A都可以简称为A。这就是为什么它们不允许在同一范围内。

要克服这个问题,您可以将它们括在namespaceclass

namespace math_students {
  enum { A, B, C };
}
namespace comp_students {
  enum { D, E, A };  // ok
}

在C ++ 11中,您可以使用enum class(它具有更严格的类型检查;并且它们不会隐式转换为int

enum class math_students {A,B,C};
enum class comp_students {D,E,A};  // ok

答案 2 :(得分:1)

您可以通过名称来引用这些值,这样就不明确了。

答案 3 :(得分:1)

因为您可以在不指定枚举名称的情况下引用这些值。

math_students student = A;

在你的情况下,这将是不明确的,因此,编译器不允许这样做。