struct foo_boolean {
bool b1;
bool b2;
};
如果我定义了一个类型为foo_boolean的变量,但没有初始化它,那么成员变量的默认值会是什么?(即true、false还是两者中的随机值。)struct foo_boolean {
bool b1;
bool b2;
};
如果我定义了一个类型为foo_boolean的变量,但没有初始化它,那么成员变量的默认值会是什么?(即true、false还是两者中的随机值。)这取决于你如何创建它。如果该结构体是通过默认初始化构造的,例如:
void foo () {
fool_boolen x; // <---
如果在设置值之前读取它,则这些值将是未定义的(如果在设置值之前读取它,会发生不好的事情)。
另一方面,如果结构是通过值初始化或零初始化构建的,例如:
fool_boolen x; // <--
void foo2 () {
static fool_boolen y; // <--
fool_boolen z = fool_boolen(); // <--
那么这些值将会是零,即false。
bool
的值是未定义的。它将是之前堆栈上的其他内容,如果没有先前使用它,则有时会归零。
但同样地,它是未定义的,这意味着它可以是 true 或 false。
如果你需要一个默认值,可以这样做:
struct fool_bool {
bool b1;
bool b2;
fool_bool() {
b1 = true;
b2 = false;
}
};
这将默认设置b1为true,b2为false。
来自标准文档,3.9.1.6.
布尔类型的值只能是true或false。47)
47)
在国际标准中描述为“未定义”的情况下使用布尔值,例如检查未初始化的自动变量的值,可能导致其表现为既不为真也不为假。
因此,它是未定义的。
它将生成随机数,为什么?因为我用g++测试过了:
#include <iostream>
using namespace std;
struct fool_bool
{
bool a;
bool b;
};
int main(int argc, char **argv)
{
fool_bool fb1;
cout << fb1.a << " : " << fb1.b << endl;
}
第一次测试显示了121、235,第二次测试显示了34、331。因此很容易理解!
如果你指的是bool
,那么初始值是未知的。
if (variable && somethingElse)
,结果为 false
,而下一个条件 else if (variable)
的结果为 true
。调试器显示该值为42,只有在将语言数据传输到外部设备时才会发生。现在试着调试一下吧! :D(哦,这是在ARM7平台上) - Refugnic Eternium当我创建了一个包含两个布尔值的结构体时,感觉很有趣。
struct test {
bool x;
bool y;
};
根据我的理解,
如果您将对象声明为全局或静态,则值应初始化为false。
否则,值未初始化(基本上可以是true/false任意一种)。
像许多人已经说过的那样,在这种情况下,bool
的值将是未定义的。
除此之外,由于 bool
是实现相关的,你几乎无法猜测出结果可能是什么,因为 bool
的值还将取自堆栈中的位置。
如果我们假设我们有1个字节来存储 bool
,并且我们用0表示false,其他则表示true,则会得到以下结果:
所以在具体实现中,尽管你不确定,但你可能会得到true(当然,这也取决于堆栈上的值是什么)。
但目前只是推测:答案就像其他所有人所说的那样:未定义。
你将获得true
或false
其中之一。
未初始化的本地变量“temp”被使用
然而,在VS 2005中,它将允许您构建,但在运行时,您将遇到此错误:运行时检查失败#3-正在使用未定义的变量“a”。
:
改成了,
? - default