可以用C++比较两个布尔值吗?

dan*_*tel 7 c++ comparison boolean

下面这段代码应该有效吗?

bool b1 = true;
bool b2 = 1 < 2;
if (b1 == b2)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)

我怀疑并非所有'真实'都是平等的.

Dan*_*nas 19

是.所有的真理都是平等的.

  • 我会在这个答案上提高标准:所有的谬误都是错误的. (7认同)
  • @nobugz完整的规则是:"所有的真理都是平等的.所有的谬误都是平等的.所有的真理都同样如此.所有的谬误都是错误的.最后,真实与虚假不同." (2认同)

J. *_*eja 11

是的,布尔值只能存储true或false,您可以比较相等的值.

但是,bool变量的一些不良用法会导致"未定义"行为,并且可能看起来既不是真也不是假.例如,从整数中读取未初始化的自动变量或直接内存副本的值.

看一下以下(坏)示例:

  bool b1 = true; 
  bool b2 = true; 
  *((char*)&b1) = 3;

  if( b1 ) cout << "b1 is true" << endl;
  if( b2 ) cout << "b2 is true" << endl;
  if (b1 != b2) cout << "b2 is not equal to b1" << endl;
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 9上,它显示:

b1是真的

b2是真的

b2不等于b1

可能是因为编译器直接比较了存储的值.

  • 我无法想象有人会以第3行的方式扭曲语言.这是一个奇怪的陈述.不是说你的观点不那么有效...... (2认同)

Ste*_*ows 7

是的,正如其他人所说,bools可以在C++中进行相等比较.您可能正在考虑从C中听到的事情.由于C没有bool类型,因此布尔值表示为整数.在布尔上下文中,任何非零整数都为真.但是,它们可能具有不同的位模式,因此不相等.因此,C中的规则并不是要比较"布尔".

编辑:根据评论,C99有一个bool类型.然而,答案的重点在于表明为什么不比较bool的想法是浮动的.它基于C99之前的悠久历史.

  • 消极的。C99 在 C99 中引入了 #include &lt;stdbool.h&gt; http://en.wikipedia.org/wiki/Stdbool.h 和 true == (bool)3 当它被包含时。 (2认同)