C++中存在enum
和enum class
两种,现代C++更加建议使用enum class
这种。理由主要有三点:
enum class
作用域更小,可以减少命名空间污染。enum
定义后,其中的枚举类作用域是整个enum
所在空间,可能对其他部分产生影响。比如
1 2 3 4
| enum Color { black, white, red }; auto white = false;
|
enum
会发隐式转换,但是enum class
不会发生
1 2 3 4 5 6 7 8 9 10 11 12 13
| enum Color { black, white, red };
std::vector<std::size_t> primeFactors(std::size_t x);
Color c = red; …
if (c < 14.5) { auto factors = primeFactors(c); … }
|
1 2 3 4 5 6 7 8 9 10 11
| enum class Color { black, white, red };
Color c = Color::red; ...
if (c < 14.5) { auto factors = primeFactors(c); … }
|
enum class
可以被前置声明。前置声明某些情况下可以减少编译依赖。
1 2
| enum Color; enum class Color;
|
enum class
使用
- 第一项进行赋值。建议对枚举第一项赋值0,这样可以帮助明确各个枚举项值。
1 2 3 4 5 6
| enum class Color { black=0, white, red };
|
- 整加count。这个是方便类似
vector<int> a(1,Color::count)
情况
1 2 3 4 5 6 7
| enum class Color { black=0, white, red, count };
|