c – 与枚举名称的枚举值冲突
发布时间:2020-12-16 03:40:55 所属栏目:百科 来源:网络整理
导读:让我们采用我最近在项目中找到的代码构造: namespace Test{ enum EName { CoolEnum,NiceEnum }; enum CoolEnum { CoolVal1,CoolVal2 }; enum NiceEnum { NiceVal1,NiceVal2 };} 我的问题是为什么编译器允许这样的东西.我们来这里是一个代码示例: Test::Coo
让我们采用我最近在项目中找到的代码构造:
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关键字,所以编译器清楚地知道我在声明给定枚举的变量,而不是在同一名称空间中使用其他枚举的值.我只是不明白为什么首先它甚至可以做这样的结构. 解决方法
C 11的枚举类是这个的解决方案:
namespace Test { enum class EName { CoolEnum,NiceEnum }; enum class CoolEnum { NiceVal1,NiceVal2 }; enum class NiceEnum { NiceVal1,NiceVal2 }; } 然后你可以使用适当的NiceVal1: Test::CoolEnum cEnum = Test::CoolEnum::NiceVal1; 普通枚举是从C继承的,其中没有命名空间的概念.如果普通枚举引入了某种命名空间,那么使用枚举的C代码根本就不会编译.这就是引入枚举类的原因,以免破坏向后兼容性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |