C++枚举类型的坑

发布于 2021-09-18  34 次阅读


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>

当其他人都认为你要鸽的时候,你鸽了,亦是一种不鸽