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
是.所有的真理都是平等的.
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
可能是因为编译器直接比较了存储的值.
是的,正如其他人所说,bools可以在C++中进行相等比较.您可能正在考虑从C中听到的事情.由于C没有bool类型,因此布尔值表示为整数.在布尔上下文中,任何非零整数都为真.但是,它们可能具有不同的位模式,因此不相等.因此,C中的规则并不是要比较"布尔".
编辑:根据评论,C99有一个bool类型.然而,答案的重点在于表明为什么不比较bool的想法是浮动的.它基于C99之前的悠久历史.
| 归档时间: |
|
| 查看次数: |
15305 次 |
| 最近记录: |