Код: Выделить всё
#include
int main()
{
struct byte
{
unsigned char high : 4;
unsigned char low : 4;
};
unsigned char u = 0xFF;
byte b = static_cast(u);
printf("%d %d", b.high, b.low);
return 0;
}
Код: Выделить всё
b.highКод: Выделить всё
b.lowНезависимо от того, насколько велико первое битовое поле или сколько битовых полей следует за ним, только первое битовое поле получает биты из источника static_cast, а все остальные, по-видимому, всегда установлены в 0.
Это очень удивительно для меня, я ожидал, что либо ошибка компиляции, либо все битовые поля будут установлены «правильно».
Почему это так? Это неопределенное поведение (маловероятно, поскольку оно компилируется и запускается во время компиляции) или оно предписано стандартом?
https://godbolt.org/z/z9jnzETsq
Подробнее здесь: https://stackoverflow.com/questions/798 ... bit-fields
Мобильная версия