Я только что увидел фрагмент кода с синтаксисом, который я никогда раньше не видел.
Что означает bool start : 1;
? Я нашел его внутри определения класса в файле заголовка.
Простой вопрос синтаксиса Си ++ о двоеточие
Ответ 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.
Ответ 2
это битполе.: 1 означает, что используется один бит. см., например, http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.71).aspx
Ответ 3
Это означает, что start
имеет ширину 1 бит, в отличие от обычного bool
длиной 1 байт. Вы можете упаковать несколько меньших переменных в большую переменную, и компилятор будет генерировать все и/или код, необходимые для чтения/записи для вас. Вы получите (заметный) удар производительности, но, если его использовать правильно, вы будете использовать намного меньше памяти.
Ответ 4
См. запись в Википедии о Поля бит. Он сообщает компилятору, сколько бит должно занимать член структуры.
Ответ 5
Он превращает элемент start
в бит-поле с 1 бит зарезервированного места.
Он действителен только для членов struct/class, вы не можете иметь переменную бит-поля.
Ответ 6
Это синтаксис для полей
По существу, вы определяете поле в структуре, чтобы иметь только несколько бит полного байта, или short или int.
Несколько битовых полей могут совместно использовать один и тот же int, поэтому этот метод можно использовать как умный способ избежать некоторых манипуляций с битами при построении значений.
Ответ 7
Это синтаксис описания полей бит . Это способ упаковки дополнительной информации в меньший объем хранилища. В то время как обычно bool занимает как минимум байт (возможно, больше) для представления, используя битовые поля, вы можете объединить несколько bools в один байт с простым синтаксисом.
Будьте осторожны. Как одна из менее известных областей языка, вы можете столкнуться с угловыми случаями при их использовании. Например, создаваемые таким образом структуры данных, вероятно, не переносимы между типами процессоров.
Ответ 8
Это бит бит-поле. Но я никогда не пробовал делать бит-поля в boolean.