让我们一码构造是我最近在项目的某个地方找到:枚举值碰撞枚举名
namespace Test
{
enum EName
{
CoolEnum,
NiceEnum
};
enum CoolEnum
{
CoolVal1,
CoolVal2
};
enum NiceEnum
{
NiceVal1,
NiceVal2
};
}
我的问题是,为什么编译器允许这样的事情。我们来看一个代码示例:
Test::CoolEnum cEnum = Test::NiceVal1; // INVALID, as compiler refers to Test::CoolEnum value of Test::Ename enum
为什么这样的混淆允许?我明白为什么必须预先加入enum关键字,所以编译器清楚地知道我声明了一个给定枚举的变量,而不是在同一个命名空间中使用其他枚举的值。我只是不明白为什么首先它甚至有可能做出这样的建设。
我想这是编译器定义的,因为在Ideone代码导致错误:http://ideone.com/4GDTF – tinman 2012-07-06 14:06:21
这就是为什么我已经放在GCC但据我所知VC还允许这样的建筑 – 2012-07-06 14:08:27
@Kamil您可能希望改变NiceEnum的枚举常量的名称,因为你从CoolEnum复制它并且它们发生冲突。 – 2012-07-06 21:38:58