枚举器的值自定义与选择
在定义枚举时,可以给任意或所有枚举器明确指定自己的整数值。枚举器的名称必须唯一,但枚举器的值并不要求唯一。除非有特殊原因,否则一般应确保各枚举器的值也是唯一的。
1. 手动指定枚举器的值
从 1 开始编号(推荐做法):
enum Weekday {Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
此时 Monday = 1,后续枚举器自动递增 1,依次为 Tuesday = 2、Wednesday = 3……Sunday = 7。这样更符合日常习惯(如周一对应 1)。
混合指定导致值重复(不推荐):
enum Weekday {Monday = 5, Tuesday = 4, Wednesday, Thursday = 10, Friday = 3, Saturday, Sunday};
各枚举器的实际值推导如下:
| 枚举器 | 推导过程 | 最终值 |
|---|---|---|
Monday | 手动指定 | 5 |
Tuesday | 手动指定 | 4 |
Wednesday | 前一项 Tuesday=4,自动 +1 | 5 |
Thursday | 手动指定 | 10 |
Friday | 手动指定 | 3 |
Saturday | 前一项 Friday=3,自动 +1 | 4 |
Sunday | 前一项 Saturday=4,自动 +1 | 5 |
结果:Monday、Wednesday、Sunday 的值都是 5;Tuesday 和 Saturday 的值都是 4。这种重复容易造成逻辑混淆,除非有特殊业务含义(如多个名称映射到同一状态码),否则不建议这样使用。
2. 枚举的适用场景
只要希望变量有限定数量的可能值,就可以使用枚举。例如定义季节:
enum Season {Spring, Summer, Autumn, Windy};
默认 Spring = 0、Summer = 1、Autumn = 2、Windy = 3。
3. 核心要点
| 规则 | 说明 |
|---|---|
| 名称唯一性 | 同一枚举内枚举器名称不能重复(编译报错)。 |
| 值唯一性 | 枚举器的值可以重复,但一般应避免。 |
| 自动递增 | 未手动赋值的枚举器,取前一项的值 +1;若第一项未赋值,则从 0 开始。 |
| 手动赋值 | 可给任意枚举器指定整数值,后续项从该值继续递增。 |