强类型枚举(enum class)

强类型枚举(enum class)
枫强类型枚举(enum class)
C++11 的
enum class主要是为了解决传统枚举的两个老问题:作用域污染和类型不够严格。
1. 传统枚举的问题
1 | enum Color { |
上面这段代码就有明显问题:不同枚举里的名字会跑到同一个作用域里,容易冲突。
另外,传统枚举和整数之间的转换也比较宽松,不够严谨。
2. C++11 的 enum class
1 | enum class Color { |
这时访问枚举值时必须带上作用域:
1 | Color c = Color::Red; |
3. 它的两个主要优点
3.1 不污染外部作用域
1 | enum class Color { Red, Green }; |
这样两个 Red 就不会冲突。
3.2 类型更严格
1 | Color c = Color::Red; |
这种限制很多时候反而能减少误用。
4. 一个简单例子
1 |
|
5. 指定底层类型
和传统枚举一样,enum class 也可以指定底层类型:
1 | enum class Status : int { |
6. 如果确实要转成整数
可以显式转换:
1 | int value = static_cast<int>(Status::Ok); |
这种“必须显式转换”的设计,本身也是类型安全的一部分。
总结
enum class 是现代 C++ 里非常值得优先使用的一种枚举写法。
相比传统 enum,它作用域更清晰,类型限制更严格,更适合工程代码。只要没有兼容旧接口的压力,新代码里一般都更推荐直接用 enum class。














