logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.9.6 Битовые поля

Конструкция описатель-члена, имеющая вид,

идентификатор opt : выражение-константа

задает битовое поле, длина которого отделяется от его имени

двоеточием. Размещение битовых полей в объекте класса зависит от

реализации. Поля упаковываются в некоторые адресуемые элементы

памяти. На одних машинах поля могут выходить за границы этих

элементов, на других - нет. Выравнивание битовых полей тоже определяется

реализацией. На одних машинах значения помещаются в битовые поля

справа налево, на других - слева направо.

Чтобы установить заданное расположение полей с помощью дополнения

нулями, используют безымянные битовые поля. Особый случай, когда

используется безымянное поле нулевой длины. Оно задает выравнивание

следующего битового поля по границе элемента памяти, используемого

при размещении полей.

Безымянное поле не является членом и не может инициализироваться.

Битовые поля должны иметь целочисленный тип ($$R.3.6.1). Их

интерпретация зависит от того, считается ли значение поля с обычным типом

int (т.е. без явного использования signed или unsigned) знаковым

или беззнаковым. Операция взятия адреса & не применима к битовым

полям, так что не может быть ни указателей на битовые поля, ни ссылок

на них.