使用cout打印未初始化的bool变量(C++)

5

我有一个类,其中包含一个未被构造函数初始化的bool数据成员。如果我执行以下操作:

cout << x.myBoolDataMember;

x 是一个尚未初始化 bool 的该类对象时,有时会得到一个随机数而不是 0 或 1。(我使用的是 gcc。)这种行为是否符合标准?

3个回答

10

这种行为符合标准吗?

不符合!在代码中使用垃圾值(未初始化的值)会引发未定义行为


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

在存在未定义行为的情况下谈论值是困难的。bool只有两个可能的值,falsetruecout << b输出除了01之外的其他内容,这是行为未被定义的结果,而不是b具有除falsetrue之外的“值”的结果。 - avakar
3
可以。它也可能什么都不打印,打印0.5、"blue",或冒烟。 - MSalters
1
你可以变成一只猫。恶魔可能会从你的鼻子里飞出来。 - Josh Lee

0

"<<"运算符一旦不检查布尔值,这种行为就是正确的。
问题出在布尔本身:程序使用多个位来存储布尔变量。这取决于实现。有时只能使用一个位来存储布尔值。
有时则需要更多,而这就是这种情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接