Это работает:
struct A {
unsigned int x = 0;
};
Это также работает:
struct A {
unsigned int x : 1;
};
Можно ли совместить два? То есть инициализировать и указывать размер одновременно? Или мне нужно явно написать конструктор для этого?
Это работает:
struct A {
unsigned int x = 0;
};
Это также работает:
struct A {
unsigned int x : 1;
};
Можно ли совместить два? То есть инициализировать и указывать размер одновременно? Или мне нужно явно написать конструктор для этого?
Давайте кратко рассмотрим грамматику [class.mem]:
декларатор-члена:
декларатор virt-specifier-seqopt pure-specifieropt
< em>объявитель скобок-или-равно-инициализаторopt
идентификаторopt атрибут-спецификатор-seqopt : константное-выражение
Битовые поля — это третий вариант, члены с инициализатором — второй. Таким образом, вы не можете иметь оба.
Однако вы можете инициализировать именованные битовые поля в списках инициализаторов конструктора, как и любой другой нестатический член данных. (Но вы не можете инициализировать безымянные битовые поля, так как они не являются членами.)