Подтвердить что ты не робот

Простой вопрос синтаксиса Си ++ о двоеточие

Я только что увидел фрагмент кода с синтаксисом, который я никогда раньше не видел. Что означает bool start : 1;? Я нашел его внутри определения класса в файле заголовка.

4b9b3361

Ответ 1

struct record {
    char *name;
    int refcount : 4;
    unsigned dirty : 1;
};

Это бит-поля; число дает точный размер поля в битах. (Подробную информацию см. В любой полной книге на языке C.) Бит-поля могут использоваться для экономии места в структурах, имеющих несколько двоичных флагов или других небольших полей, и их также можно использовать для того, чтобы соответствовать внешним схемам хранения. (Их успех в последней задаче смягчается тем фактом, что бит-поля назначаются слева направо на некоторых машинах и справа налево на других).

Обратите внимание, что нотация двоеточия для указания размера поля в битах действительна только в структурах (и в союзах); вы не можете использовать этот механизм для указания размера произвольных переменных.

  • Ссылки: K & R1 Sec. 6.7 с. 136-8.
  • K & R2 Sec. 6.9 с. 149-50
  • Раздел ISO. 6.5.2.1
  • H & S Sec. 5.6.5 с. 136-8.

Ответ 3

Это означает, что start имеет ширину 1 бит, в отличие от обычного bool длиной 1 байт. Вы можете упаковать несколько меньших переменных в большую переменную, и компилятор будет генерировать все и/или код, необходимые для чтения/записи для вас. Вы получите (заметный) удар производительности, но, если его использовать правильно, вы будете использовать намного меньше памяти.

Ответ 4

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

Ответ 5

Он превращает элемент start в бит-поле с 1 бит зарезервированного места.

Он действителен только для членов struct/class, вы не можете иметь переменную бит-поля.

Ответ 6

Это синтаксис для полей

По существу, вы определяете поле в структуре, чтобы иметь только несколько бит полного байта, или short или int.
Несколько битовых полей могут совместно использовать один и тот же int, поэтому этот метод можно использовать как умный способ избежать некоторых манипуляций с битами при построении значений.

Ответ 7

Это синтаксис описания полей бит . Это способ упаковки дополнительной информации в меньший объем хранилища. В то время как обычно bool занимает как минимум байт (возможно, больше) для представления, используя битовые поля, вы можете объединить несколько bools в один байт с простым синтаксисом.

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

Ответ 8

Это бит бит-поле. Но я никогда не пробовал делать бит-поля в boolean.