在 C++ 中,枚举(enum)是一种用户定义的类型,用于将一组命名的整数常量(枚举值)组合在一起。枚举值的隐式分配机制指的是编译器在未显式指定枚举值时,自动为枚举成员分配整数值。
当枚举成员未显式指定值时,编译器会按定义顺序从 0 开始递增分配值,每次递增 1。
enum Color {
RED, // 隐式分配 0
GREEN, // 隐式分配 1(前一个值 +1)
BLUE // 隐式分配 2(前一个值 +1)
};
如果部分枚举成员显式指定了值,后续未指定值的成员会基于前一个显式值递增。
enum Weekday {
MON = 1, // 显式分配 1
TUE, // 隐式分配 2(1 + 1)
WED, // 隐式分配 3(2 + 1)
THU = 5, // 显式分配 5
FRI, // 隐式分配 6(5 + 1)
SAT, // 隐式分配 7(6 + 1)
SUN // 隐式分配 8(7 + 1)
};
C++ 允许不同枚举成员分配相同的整数值(显式或隐式),编译器不会报错。
enum Status {
SUCCESS = 0,
FAILURE = 1,
ERROR = 1 // 与 FAILURE 重复,合法但不推荐
};
C++11 及以上:
可以通过 enum class 枚举名 : 底层类型 显式指定底层类型(如 enum class Flag : char { … })。若未指定,底层类型是能容纳所有枚举值的最小整数类型(可能是 char、short 等)。C++11 引入的强类型枚举(enum class)禁止隐式转换为整数,需显式转换(如 static_cast(Flag::A))。
总结就是:
未显式指定值时,从 0 开始递增(步长为 1)。
若前一个成员显式指定了值,后续成员从该值递增。
允许重复值,但需谨慎使用。
传统枚举支持与整数的隐式转换,强类型枚举(enum class)则禁止