Значения по умолчанию для битовых полей в С++ 11

Это работает:

struct A {
  unsigned int x = 0;
};

Это также работает:

struct A {
  unsigned int x : 1;
};

Можно ли совместить два? То есть инициализировать и указывать размер одновременно? Или мне нужно явно написать конструктор для этого?


person dshin    schedule 26.03.2015    source источник
comment
Спасибо, ТониК. Похоже, С++ 14 должен исправить это.   -  person dshin    schedule 26.03.2015


Ответы (1)


Давайте кратко рассмотрим грамматику [class.mem]:

декларатор-члена:
декларатор virt-specifier-seqopt pure-specifieropt
< em>объявитель скобок-или-равно-инициализаторopt
идентификаторopt атрибут-спецификатор-seqopt : константное-выражение

Битовые поля — это третий вариант, члены с инициализатором — второй. Таким образом, вы не можете иметь оба.

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

person Kerrek SB    schedule 26.03.2015