强类型枚举
C++11 引入了强类型枚举(Strongly-Typed Enums),也称为限定作用域枚举(Scoped Enums),通过关键字 enum class
来实现。它解决了传统 C 风格枚举存在的一些问题,提供了更强的类型安全性和更灵活的功能。
C 风格枚举的问题
在传统的 C 风格枚举中(C++98 及之前),存在以下问题:
- 隐式转换:
枚举值可以隐式转换为整数,可能导致意外的类型错误。 - 作用域污染:
枚举成员暴露在外部作用域中,容易与其他变量或枚举冲突。 - 底层类型不可指定:
枚举的底层类型通常是int
,但无法显式指定其他类型。
示例代码
#include <iostream>
enum Color {
Red, Green, Blue };
enum TrafficLight {
Red, Yellow, Green };
int main() {
Color c = Red;
TrafficLight t = Red; // 与 Color 的 Red 冲突
int colorValue = Green; // 隐式转换,可能导致意外错误
std::cout << "Color value: " << colorValue << std::endl;</