为什么我不推荐用 enum class 作为强类型的整数?
C++11 之后 enum 的新增功能
enum class 是 C++11 提供的功能,为了更好理解后文的内容,我们先看看 C++11 之后 enum 有什么变化。参考资料见 https://en.cppreference.com/w/cpp/language/enum 。
有作用域枚举
有作用域枚举(Scoped enumerations)使用 enum class|struct ClassName
声明,以区别于原来的无作用域枚举。无作用域枚举的枚举量可以直接在外围名字空间中访问,当枚举类有名字且 C++ 版本至少为 C++11 时,可以通过 枚举名::枚举量
访问;有作用域枚举只能通过 枚举名::枚举量
访问。
有作用域枚举的默认底层类型是 int
。
例子:
void example() {
enum class Color { red, green = 20, blue };
Color r = Color::blue;
}