简短答案是“否” - 在枚举常量已被定义后,您无法更改其值。
从语义上讲,这样做没有任何意义。使用枚举类型的全部观点是抽象出底层表示 - 你关心的是颜色是red
,而不是43或56或其他。换句话说,如果它重要red
是43或56,那么你不应该使用枚举。
当您创建一个枚举类型的对象时,基本上是说对象只能采用其中一个枚举值;它可以是red
或blue
或。如果要表示次要颜色,则需要为这些次级定义枚举常量。您可以根据包含初选的表达式来定义这些辅助。以下是许多可能的编码之一:
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
,,magenta
之一,cyan
,yellow
,或white
(不考虑底层的整数值)。
当然,C对此并不严格:枚举类型的对象可以保存任意整数值,即使该值没有出现在枚举常量列表中,但通过这样做,重新打破该类型隐含的概念模型
枚举通常在事先已知所有枚举的情况下使用 - 将推荐您提及的结构 – jakx