В C ++ у меня есть класс, который содержит анонимную структуру битового поля. Я хочу инициализировать его нулем без необходимости вручную записывать все поля.
Я могу представить инициализацию в трех местах:
- Создать конструктор в битовом поле
- Обнуление в списке инициализатора конструктора для содержащего класса
- Обнуление в теле конструктора для содержащего класса
В этом битовом поле много полей, и я бы не стал перечислять их все.
Например, см. Следующий код:
class Big {
public:
Big();
// Bitfield struct
struct bflag_struct {
unsigned int field1 : 1;
unsigned int field2 : 2;
unsigned int field3 : 1;
// ...
unsigned int field20 : 1;
// bflag_struct(); <--- Here?
} bflag;
unsigned int integer_member;
Big *pointer_member;
}
Big::Big()
: bflag(), // <--- Can I zero bflag here?
integer_member(0),
pointer_member(NULL)
{
// Or here?
}
Один из них предпочтительнее? Или я что-то пропустил?
Редактировать: На основании принятого ответа ниже (Ферруччо) я остановился на этом решении:
class Big {
// ...
struct bflag_struct {
unsigned int field 1 : 1;
// ...
bflag_struct() { memset(this, 0, sizeof *this); };
}
// ...
}