簡短答案是「否」 - 在枚舉常量已被定義後,您無法更改其值。
從語義上講,這樣做沒有任何意義。使用枚舉類型的全部觀點是抽象出底層表示 - 你關心的是顏色是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