起始設定列舉
列舉變數的起始設定元包含 = 符號,後面接著表示式 enumeration_constant。
在 C++ 中,起始設定表示式的類型必須與相關聯的列舉類型相同。
下列範例的第一行宣告列舉
grain。 第二行定義變數 g_food ,並提供 g_food barley 的起始值 (2)。enum grain { oats, wheat, barley, corn, rice };
enum grain g_food = barley;
僅限 C++11 的開頭。
下列規則適用於限定範圍和非限定範圍的列舉。
- 在沒有明確強制轉型的情況下,無法使用來自不同列舉的整數或列舉常數來起始設定列舉。
- 未起始設定的列舉變數有未定義的值。
下列陳述式宣告非限定範圍列舉color.
enum color { white, yellow, green, red, brown };
下列陳述式宣告範圍列舉letter並直接在列舉範圍內參照限定範圍的列舉元。 A、B、C 及 D 的起始值為 0、1、1 及 2。
enum class letter { A, B, C = B, D = C + 1 };
下列陳述式定義變數let1並起始設定let1至值A. 相關聯的整數值A是 0。
letter let1 = letter :: A;
如果要參照超出列舉範圍的限定範圍列舉元,您必須以列舉名稱來限定列舉元。 例如,下列陳述式無效。
letter let2 = A; //invalid
關鍵字enum在下列陳述式中是選用的,可以省略。
enum letter let3 = letter :: B;
Thewhite在下列陳述式中可見列舉元,因為color是非限定範圍的列舉。
color color1 = white; // valid
也可以使用其列舉範圍來限定非限定範圍的列舉,例如:
color color2 = color :: yellow; // valid
您無法使用來自不同列舉的列舉常數或沒有明確強制轉型的整數來起始設定列舉。 例如,下列兩個陳述式無效。
letter let4 = color :: white; // invalid
letter let5 = 1; // invalid
您可以使用明確強制轉型,以使用來自不同列舉或整數的列舉常數來起始設定列舉。 例如,下列兩個陳述式有效。
letter let6 = (letter) color :: white; // valid
letter let7 = (letter) 2; // valid
僅限 C++11 結尾。
相關資訊