Статус битовых полей в системе категории выражений языка Си++

Данная статья содержит следующе утверждения

Битовые поля – удобный инструмент для низкоуровнего программирования, однако, их реализация несколько выпадает из общей структуры категорий выражений.

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

В моем понимании, второе утверждение верно, если уточнить что понятие адреса в взято в том же смысле как его использует стандарт. Первое не совсем. О чем я и написал комментарий:

Когда речь идет об identity,имеется в виду любой вид уникальности.

В Си++ ставится различие между storage (область памяти) и memory location (ячейка памяти).Ряд объектов обладает и тем и другим, например, объекты скалярного типа или члены классов и элементы массивов этого типа. У класса есть область памяти, но нет ячейки, в то время как члены могут занимать ячейки. У ссылок в составе классов и у битовых полей (которые по определению являются членами класса) есть ячейка памяти, но нет области памяти. Уникальной особенностью битовых полей является то, что несколько полей ненулевого размера могут занимать одну ячейку

Скорее в уникальную ситуацию можно было бы записать члены объединения, т.к. тут перекрываются области памяти. Однако нам категорически запрещено рассматривать объединение как два или более объектов существующих одновременно. И это как раз из-за того, что система категорий фундаментальна.

Указатель и ссылка обращаются к области памяти. Поэтому для битовых полей их и не может быть. Поэтому невозможна ссылка на ссылку. Однако ВСЯ ячейка памяти целиком является субъектом выражения, поэтому, если а и b - битовые поля с общей ячейкой, то результат выражения a++ + ++b является таким же неопределенным поведением как и a++ + ++a , где одно и то же значение (одна и та же ячейка) меняется дважды.

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

Верно ли мое рассуждение с точке зрения стандарта?


Ответы (0 шт):