为什么在C++中不允许在同一个块中声明两个具有相同值的枚举?具有相同值的枚举类型
enum math_students {A,B,C};
enum comp_students {D,E,A}; // illegal
为什么在C++中不允许在同一个块中声明两个具有相同值的枚举?具有相同值的枚举类型
enum math_students {A,B,C};
enum comp_students {D,E,A}; // illegal
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
您可以通过它们的名称引用这些值,这样就会模糊不清。
enum中的值没有作用域。枚举的成员可以直接通过他们的名字来访问。因此,如果多个枚举具有相同名称的成员,将会有一个命名冲突。
对于C++ 0x语法,我强烈建议使用C++ 0x的人有系统地迁移到* scoped枚举*。 –
+1。请注意,* unnamed *枚举不会作为模板参数。 – Nawaz
在OP中,我可以创建一个接受math_students'foobar(math_students val)'的函数。如果我将它们放在类或名称空间中,这是不可能的吗? –