假设我有一个名为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)
那么值将为零,即为假.
bool意志的值是未定义的.它将是它之前的堆栈上的任何其他东西,如果之前没有使用它,它有时会被清零.
但同样,它是未定义的,这意味着它可以是真或假.
如果您需要默认值,您可以:
struct fool_bool {
bool b1;
bool b2;
fool_bool() {
b1 = true;
b2 = false;
}
};
Run Code Online (Sandbox Code Playgroud)
这使得b1默认为true,b2为false.
来自标准文档,3.9.1.6.
bool类型的值是true还是false.47)
47)
以本国际标准描述的方式将bool值用作"未定义",例如通过检查未初始化的自动变量的值,可能会使其表现为既不是真也不是假.
所以,它是未定义的..