Три соответствующих типа инициализации, нулевой инициализации, инициализации по умолчанию и инициализации значения для bool означают, соответственно, что bool инициализируется значением false, что bool имеет неопределенное значение и что bool является инициализируется на false.
Таким образом, вам просто нужно убедиться, что вы получаете нуль или инициализацию значения. Если объект с автоматической или динамической продолжительностью хранения инициализируется без указания инициализатора, вы получаете инициализацию по умолчанию. Чтобы получить инициализацию значения, вам нужен пустой инициализатор, либо ()
, либо {}
.
bool b{}; // b is value-initialized
bool *b2 = new bool{}; // *b2 is value-initialized
class foo {
bool b;
foo() : b() {}
};
foo f; // // f.b is value-initialized
Вы получаете нулевой инициализации для BOOL, статический или распараллеливания продолжительность локального хранения и не имеет инициализатора.
static bool b; // b is zero-initialized
thread_local bool b2; // b2 is zero-initialized
Еще один случай, когда вы получаете нулевой инициализации, если BOOL является членом класса без предоставленного пользователем конструктора и неявный конструктор по умолчанию является тривиальным, а экземпляр класса или ценностно нуль- инициализируется.
class foo {
bool b;
};
foo f{}; // f.b is zero-initialized
thread_local foo f2; // f2.b is zero-initialized
Обратите внимание, что мой код находится в шаблоне, templatization которого является bool в случае возникновения этого вопроса, но также может быть не-POD, для которого я хочу конструктор по умолчанию. – WilliamKF