超出範圍的列舉值
如果將作用域列舉轉換為太小而不能保持其值的整數型別,則結果值未指定。例:
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,與 ONE
,TWO
和 FOUR
不相等。