C++中有两种枚举,
- 普通枚举(enum,unscoped enum)
- 枚举类(enum class, scoped enum)
通常,花括号里面的名字具有scope的作用域及可见性,但对普通枚举并非如此。普通枚举中定义的枚举常量,在花括号外也可见。而枚举类则需要加上类名+域作用符来获取花括号内的名字。
enum Color { RED = 1, GREEN, BLUE, };
enum class CMYK { C = -1, M = 0, Y = 2, K, };
enum NewColor: uint8_t { NR = 0, NG, NB };
void foo()
{
Color c = RED;
CMYK cmyk = CMYK::C; // Note: scope is need here
NewColor nc = NB;
cout << sizeof c << endl; // 4
cout << sizeof(cmyk) << endl; // 4
cout << sizeof(NewColor) << endl; // 1
}
此外,enum class不允许隐式转换为整数,意味着你需要显式转换,也就是说enum class具有更强的类型。