枚举初始化

枚举变量的初始化方法包含 = 符号,后跟表达式 enumeration_constant

仅限 C + + 在C++中,初始化器的类型必须与关联的枚举类型相同。仅限 C + +

以下语句声明了一个 C++11无范围C++11 枚举 grain
enum grain { oats, wheat, barley, corn, rice };
以下语句定义变量 g_food 并将 g_food 初始化为 barley的值。 与 barley 关联的整数值为 2。
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;
white 枚举符在以下语句中可视,因为 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