快速提问:
如果我有这样的枚举:
enum EnumA
{
stuffA = 0
};
enum enumAA
{
stuffA = 1
};
Run Code Online (Sandbox Code Playgroud)
你提到的时候会发生什么stuffA?我以为你会提到他们喜欢EnumA.stuffA和EnumB.stuffA在Java中,但似乎并不如此.
感谢您的任何见解
编辑 - 感谢您的快速回复!
enums 不要引入新的范围.
在您的示例中,enum由于stuffA名称冲突,第二个将无法编译.
为了避免名称冲突,通常的做法是给出enum一个公共前缀的元素.不同的前缀将用于不同的枚举:
enum EnumA
{
EA_stuffA = 0
};
enum EnumAA
{
EAA_stuffA = 1
};
Run Code Online (Sandbox Code Playgroud)
枚举常量位于全局名称空间中(更准确地说,是普通标识符名称空间,与标签,标记和结构/联合成员命名空间形成对比),因此您在第二个上获得编译错误stuffA.
在单个转换单元中,不能对同一枚举名称使用两个不同的值(也不能使用指定两次的相同值).
正如其他人已经说过的,枚举常量在定义它们的实际范围内必须是唯一的.但与其他标识符一样,它们可以在另一个范围内重新定义它们.例如.
enum EnumA
{
stuffA = 0
};
void func(void) {
enum enumAA
{
stuffA = 1
};
// do something
}
Run Code Online (Sandbox Code Playgroud)
没关系.但是在不同范围内的这种重新定义往往是不受欢迎的,应该有很好的文档记录,否则你会很快失去自己和他人.