假设我有一个名为foo_boolean的结构,它包含一些布尔值:
struct foo_boolean {
bool b1;
bool b2;
};
如果我在没有初始化的情况下定义foo_boolean类型的变量,那么成员变量的默认值是多少? (即真实,虚假或两者的随机值。)
答案 0 :(得分:16)
这取决于你如何创建它。如果结构由 default-initialization 构成,例如
void foo () {
fool_boolen x; // <---
然后值未定义(如果在设置值之前读取它会发生错误)。
另一方面,如果结构由值初始化或零初始化构成,例如
fool_boolen x; // <--
void foo2 () {
static fool_boolen y; // <--
fool_boolen z = fool_boolen(); // <--
然后值将为零,即 false 。
答案 1 :(得分:9)
bool
的值将是未定义的。它将是它之前堆栈上的任何其他内容,如果之前没有使用它,它有时会被清零。
但同样,它是未定义的,这意味着它可以是真或假。
如果您需要默认值,可以执行以下操作:
struct fool_bool {
bool b1;
bool b2;
fool_bool() {
b1 = true;
b2 = false;
}
};
这使得b1默认为true,b2为false。
答案 2 :(得分:6)
来自标准文档, 3.9.1.6。
bool类型的值为true或false.47)
47)
将本国际标准所描述的bool值用作“未定义”,例如检查未初始化的自动值 变量,可能会导致表现得好像既不是真也不是假。
所以,它是未定义的..
答案 3 :(得分:2)
会产生随机数,为什么?因为我用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 所以很容易搞清楚!
答案 4 :(得分:1)
如果您的意思是bool
,则初始值未知。
答案 5 :(得分:0)
许多人已经说过,在这种情况下,bool
的值将未定义。
在bool
依赖于实现的基础上,您几乎无法猜测会产生什么结果,因为知道bool
将会获取栈中的值
如果我们假设有1个字节来存储bool
,并且我们为false则为0,否则为true,那么您将:
因此,使用特定实施方式,即使您不确定,也可能可能得到正确的结果(当然,这也取决于那是什么)在堆栈中的位置。
但这只是一个猜测:答案是未定义,正如其他人所说。
您将拥有true
或 false
。
答案 6 :(得分:0)
当我用两个布尔值创建结构时很有趣
struct test {
bool x;
bool y;
};
将它们添加到向量中并稍后迭代 - 仅将值 x 设置为 true 并打印它们发现默认值通常为 '0' 表示 false 但当其中一个显式设置为 true 时,另一个成员也会导致'1' 表示正在使用堆栈中的最后一个值。
这可能是一个如此痛苦的错误 - 很高兴被一些单元测试发现。
答案 7 :(得分:-1)
在VS 2012中,如果您没有初始化bool变量,则会遇到错误C4700:uninitialized local variable 'temp' used
但是,在VS 2005中,它允许您构建,但在运行时,您将遇到此错误:Run-Time Check Failure #3 - The variable 'a' is being used without being defined.
答案 8 :(得分:-2)
根据我的理解,
如果您将对象声明为全局或静态,则应将值初始化为false。
否则,值不会被初始化(基本上可以是true / false)。