C++标准的第3.9.1/6节说,
bool类型的值是
true或者false.
现在考虑这段代码,
void f(bool b)
{
switch(b) //since b is bool, it's value can be either true or false!
{
case true: cout << "possible value - true"; break;
case false: cout << "possible value - false"; break;
default: cout << "impossible value";
}
}
int main()
{
bool b; //note : b is uninitialized
f(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编 F:\workplace>g++ test.cpp -pedantic
跑.输出:
不可能的价值
出乎意料的输出?嗯,不是真的,因为标准在§3.9.1/ 6的脚注中读到:
以本国际标准描述的方式将bool值用作 "未定义",例如通过检查未初始化的自动对象的值,可能会使其表现为既不是真也不是假 …
c++ compiler-construction gcc initialization undefined-behavior
在以下代码中,变量没有初始值并打印此变量.
int var;
cout << var << endl;
Run Code Online (Sandbox Code Playgroud)
输出:2514932
double var;
cout << var << endl;
Run Code Online (Sandbox Code Playgroud)
输出:1.23769e-307
我不明白这些输出数字.任何人都可以向我解释一下吗?
我有一个类,其中一个bool数据成员未被构造函数初始化.如果我做
cout << x.myBoolDataMember;
Run Code Online (Sandbox Code Playgroud)
x这个类的对象在哪里bool尚未初始化,我有时得到一个随机数而不是0或1.(我正在使用gcc.)这种行为是否符合Standard?