C++中的新型枚举类型定义法

以前C++中的枚举类型存在很多问题其中之一就是命名冲突,如下所示:

由上图得知这是两个独立的枚举类型变量,按理说来它们应该有各自的域,而域中即便存在与其他枚举类型相同的名字也应该不冲突才对啊,但是实际上它就是冲突。现在我们加以验证来证实这一点。

这回就正常了,这就说明了枚举类型是不具有域的限制的,所以C++11提出了一种新的枚举类型,那就是域枚举类型。现在我在原来的枚举类型的基础上加上一个class进行修饰,那这就变成了一个带有域枚举类型。在这里还要说明与一般的枚举类型变量不一样,域枚举类型是不存在隐式转换的,所以你一定要用强制类型转换。

这是在VS上实验所得到的结果,其实在C++11标准中域枚举类型默认的就是整形,C++11标准为了避免各编译器对枚举类型实现的差异性采取了统一的标准。你也可以显式指定枚举类型的具体默认类型:


不过这个目前在VS上行不通。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容