以前C++中的枚举类型存在很多问题其中之一就是命名冲突,如下所示:
由上图得知这是两个独立的枚举类型变量,按理说来它们应该有各自的域,而域中即便存在与其他枚举类型相同的名字也应该不冲突才对啊,但是实际上它就是冲突。现在我们加以验证来证实这一点。
这回就正常了,这就说明了枚举类型是不具有域的限制的,所以C++11提出了一种新的枚举类型,那就是域枚举类型。现在我在原来的枚举类型的基础上加上一个class进行修饰,那这就变成了一个带有域枚举类型。在这里还要说明与一般的枚举类型变量不一样,域枚举类型是不存在隐式转换的,所以你一定要用强制类型转换。
这是在VS上实验所得到的结果,其实在C++11标准中域枚举类型默认的就是整形,C++11标准为了避免各编译器对枚举类型实现的差异性采取了统一的标准。你也可以显式指定枚举类型的具体默认类型:
不过这个目前在VS上行不通。