2010-01-28 50 views
8

我有一个没有被构造函数初始化的bool数据成员。如果我做使用cout打印未初始化的bool(C++)

cout << x.myBoolDataMember; 

其中x是这个类中的bool尚未初始化的对象,我有时会收到,而不是0或1的随机数(我使用gcc。)这是行为符合Standard

回答

10

此行为是否符合标准?

是的!在您的代码中使用垃圾值(未初始化)调用未定义的行为

4

是的。未初始化的变量可以具有任何值。

+0

在存在未定义的行为时,很难谈论价值。 'bool'只有两个可能的值,'false'和'true'。 “cout << b'输出除”0“和”1“之外的事物是未定义行为的结果,而不是具有”false“或”true“以外的”值“的”b“的结果。 – avakar 2010-01-28 11:51:06

+3

是的。它也可以不打印任何东西,0.5,“蓝色”,或冒烟 – MSalters 2010-01-28 12:01:58

+1

你可以变成一只猫。恶魔可以飞出你的鼻子。 – 2010-01-28 12:34:59

0

只要“< <”操作不检查布尔,这种行为是正确的。
这里的问题隐藏在布尔本身中:程序使用多个位来存储布尔。这取决于实施。有时候只有一位可以用来存储布尔。
有时候更多,而且是这样的情况。