简短的回答是“否”——在定义枚举常量后,您不能更改它的值。
从语义上讲,这样做没有任何意义。使用枚举类型背后的全部意义在于抽象出底层表示——您关心颜色是red,而不是 43 或 56 或其他任何颜色。换句话说,如果red 是 43 或 56很重要,那么您不应该使用枚举。
当您创建一个枚举类型的对象时,您基本上是在说该对象只能采用这些枚举值之一;它可以是red 或blue 或green。如果要表示辅助颜色,则需要为这些辅助颜色定义枚举常量。您可以根据包含主要元素的表达式来定义这些次要元素。以下是许多可能的编码之一:
enum color {black = 0x00, // binary 0000
red = 0x01, // binary 0001
blue = 0x02, // binary 0010
green = 0x04, // binary 0100
magenta = red | blue, // binary 0011
cyan = blue | green, // binary 0110
yellow = red | green, // binary 0101
white = red | blue | green // binary 0111
};
显示的编码很方便;它们展示了如何从原色构建二次色。它们也是完全任意的;您可以将类型定义为
enum color {black, red, blue, green, magenta, cyan, yellow, white};
并且完全不用担心基础值(分别为 0、1、2、3、4、5、6 和 7)。
通过创建此类型,您暗示enum color 类型的对象应该仅采用值black、red、blue、green 之一、magenta、cyan、yellow 或 white(与基础整数值无关)。
当然,C 对此并不严格:枚举类型的对象可以保存任意整数值,即使该值没有出现在枚举常量列表中。但是这样做,你打破类型隐含的概念模型。