C++一般声明枚举的语法如下:
enum 名字(可选) { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... }
发现了没有,名字是可选的!这种枚举被称作无作用域枚举,每一个枚举项都是一个直接声明的变量名!
如果我们在同一个命名空间声明了两个枚举,它们有不同的名字,但是出现了同名枚举项,那么会报名称重复错误。
所以C++11针对枚举引入了作用域枚举:
<strong>enum</strong>
<strong>struct|class</strong>
名字<strong>{</strong>
枚举项<strong>=</strong>
常量表达式<strong>,</strong>
枚举项<strong>=</strong>
常量表达式<strong>,</strong>
...<strong>}</strong>
<strong>enum</strong>
<strong>struct|class</strong>
名字<strong>:</strong>
类型<strong>{</strong>
枚举项<strong>=</strong>
常量表达式<strong>,</strong>
枚举项<strong>=</strong>
常量表达式<strong>,</strong>
...<strong>}</strong>
<strong>enum</strong>
<strong>struct|class</strong>
名字<strong>enum</strong>
<strong>struct|class</strong>
名字<strong>:</strong>
类型<strong>;</strong>
这时候的枚举就比较像java中的枚举类型了。
此外还可以指定枚举的底层类型,默认是int,无作用域枚举也适用:
<strong>enum</strong>
名字(可选)<strong>:</strong>
类型<strong>{</strong>
枚举项<strong>=</strong>
常量表达式<strong>,</strong>
枚举项<strong>=</strong>
常量表达式<strong>,</strong>
...<strong>}</strong>
<strong>enum</strong>
名字<strong>:</strong>
类型<strong>;</strong>
叨叨几句... NOTHING