объявление битового поля в структуре c ++

Я перечитывал стандарт ISO c ++ и пришел к декларациям битовых полей. Следующий код мне не совсем понятен

struct {
char a;
int b:5,
c:11,
:0,
d:8;
struct {int ee:8;}
e;
}

Здесь указывается, что поля a, d и e.ee имеют разные области памяти и могут быть независимо изменены с помощью нескольких потоков. Битовые поля b и c используют одни и те же области памяти, поэтому их нельзя изменять одновременно. Я не понимаю значение использования двух битовых полей для c, т.е. c:11,:0,, Кто-нибудь может очистить мое видение по этому поводу? благодарю вас

4

Решение

Вы спрашивали;

Я не понимаю значимости использования двух битовых полей для c, т.е. c: 11,: 0 ,. Кто-нибудь может очистить мое видение по этому поводу?

c не определяется с использованием двух битовых полей. Второе — безымянное битовое поле. Безымянные битовые поля с нулевой шириной имеют особое значение. Это то, что стандарт говорит о безымянном битовом поле.

Объявление для битового поля, в котором отсутствует идентификатор, объявляет безымянное битовое поле. Безымянные битовые поля не являются членами и не могут быть инициализированы. [Примечание: безымянное битовое поле полезно для заполнения, чтобы соответствовать наложенным извне макетам. — примечание конца] Как особый случай, неназванное битовое поле с шириной нуля определяет выравнивание следующего битового поля на границе единицы выделения. Только при объявлении безымянного битового поля значение константного выражения может быть равно нулю.

5

Другие решения

перечисление: 0 после c заставляет d быть выровненным по границе следующего слова.

Это зависит от размера вашего слова. Предположим, что ваш размер слова составляет 32 бита, a, b и c будут втиснуты в первые 24 бита ваших первых 32 бит, а затем: 0 заставит следующий элемент, d, выровняться по следующему слову. А поскольку следующий элемент — это не битовое поле, а структура, состоящая из битового поля, он автоматически выравнивается по границе следующего слова.

Таким образом, a, b и c все будут в одном и том же слове, затем d будет в своем собственном слове, и, наконец, ваша структура, e.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector