超出范围的枚举值

如果将作用域枚举转换为太小而不能保持其值的整数类型,则结果值未指定。例:

enum class E {
    X = 1,
    Y = 1000,
};
// assume 1000 does not fit into a char
char c1 = static_cast<char>(E::X); // c1 is 1
char c2 = static_cast<char>(E::Y); // c2 has an unspecified value

此外,如果将整数转换为枚举且整数的值超出枚举值的范围,则结果值未指定。例:

enum Color {
    RED = 1,
    GREEN = 2,
    BLUE = 3,
};
Color c = static_cast<Color>(4);

但是,在下一个示例中,行为指定,因为源值在枚举范围内,尽管它与所有枚举器不相等:

enum Scale {
    ONE = 1,
    TWO = 2,
    FOUR = 4,
};
Scale s = static_cast<Scale>(3);

这里 s 的值为 3,与 ONETWOFOUR 不相等。