什么是c ++中未初始化的布尔值的默认值

Hai*_*ang 11 c++

假设我有一个名为foo_boolean的结构,它包含一些布尔值:

struct foo_boolean {
    bool b1;
    bool b2;
};
Run Code Online (Sandbox Code Playgroud)

如果我定义了一个foo_boolean类型的变量而没有初始化它,那么成员变量的默认值是多少?(即真实,虚假或两者的随机值.)

ken*_*ytm 16

这取决于你如何创建它.如果结构是通过默认初始化构建的,例如

void foo () {
  fool_boolen x;   // <---
Run Code Online (Sandbox Code Playgroud)

那么值将是未定义的(如果在设置值之前读取它会发生不好的事情).

另一方面,如果结构是通过值初始化零初始化构造的,例如

fool_boolen x;   // <--

void foo2 () {
  static fool_boolen y; // <--
  fool_boolen z = fool_boolen();  // <--
Run Code Online (Sandbox Code Playgroud)

那么值将为零,即为.


Ale*_*rty 9

bool意志的值是未定义的.它将是它之前的堆栈上的任何其他东西,如果之前没有使用它,它有时会被清零.

但同样,它是未定义的,这意味着它可以是真或假.

如果您需要默认值,您可以:

struct fool_bool {
  bool b1;
  bool b2;
  fool_bool() {
    b1 = true;
    b2 = false;
  }
};
Run Code Online (Sandbox Code Playgroud)

这使得b1默认为true,b2为false.


lia*_*iaK 6

来自标准文档,3.9.1.6.

bool类型的值是true还是false.47)

47)

以本国际标准描述的方式将bool值用作"未定义",例如通过检查未初始化的自动变量的值,可能会使其表现为既不是真也不是假.

所以,它是未定义的..