Предупреждение компилятора (уровень 4) C4463
переполнение; назначение значения битового поля, которое может содержать только значения из low_value в high_value
Назначенное значение выходит за пределы диапазона значений, которые может хранить битовое поле. Подписанные типы битовых полей используют бит высокого порядка для знака, поэтому если n является размером битового поля, диапазон для подписанных бит-полей равен -2n-1 до 2n-1-1, а необписанные битовые поля имеют диапазон от 0 до 2n-1.
Пример
В этом примере возникает ошибка C4463, так как она пытается назначить значение 3 битовому полю типа int
размером 2, которое имеет диапазон от –2 до 1.
Чтобы устранить эту проблему, можно изменить назначенное значение на что-то в допустимом диапазоне. Если битовое поле предназначено для хранения неподписанных значений в диапазоне от 0 до 3, можно изменить тип unsigned
объявления на . Если поле предназначено для хранения значений в диапазоне от -4 до 3, можно изменить размер битового поля на 3.
// C4463_overflow.cpp
// compile with: cl /W4 /EHsc C4463_overflow.cpp
struct S {
int x : 2; // int type treats high-order bit as sign
};
int main() {
S s;
s.x = 3; // warning C4463: overflow; assigning 3
// to bit-field that can only hold values from -2 to 1
// To fix, change assigned value to fit in range,
// increase size of bitfield, and/or change base type
// to unsigned.
}