为什么在C ++中不允许声明在同一块中具有相同值的两个枚举类型?
enum math_students {A,B,C};
enum comp_students {D,E,A}; // illegal
答案 0 :(得分:3)
枚举中的值不是作用域。枚举的成员可以通过其名称直接访问。因此,如果多个枚举具有相同名称的成员,则会出现命名冲突。
答案 1 :(得分:3)
C ++ 03 enum
在其范围下没有更严格的类型检查。因此,math_students::A
和comp_students::A
都可以简称为A
。这就是为什么它们不允许在同一范围内。
要克服这个问题,您可以将它们括在namespace
或class
。
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;
在你的情况下,这将是不明确的,因此,编译器不允许这样做。