超出範圍的列舉值

如果將作用域列舉轉換為太小而不能保持其值的整數型別,則結果值未指定。例:

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 不相等。