C++枚举值隐式分配机制详解

在 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)则禁止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值