【发布时间】:2026-01-29 05:15:03
【问题描述】:
bool 数据类型通常表示为0(false)和1(true)。但是,有人说true 值可以用1 以外的值表示。如果后面的语句是true,那么下面的表达式可能不正确。
bool x = 1;
if (x==1)
Do something..
我想知道以下语句是否可以在常用编译器上按预期工作。
-
bool x = 1; if (x==1) Do something. -
bool y = 0; if (y>0.5) Do something.. -
bool z = 1; if(z>0.5) Do something...
【问题讨论】:
-
This implicit conversion reference 可能有助于阅读。
-
根据布尔转换规则:“零值(对于整数、浮点和无范围枚举)和空指针和空指针到成员值变为假。所有其他值成为现实。”
-
与
bool之间的转换不取决于bool的表示方式。即使true表示为 39 并且false表示为 10003,您的代码也可以工作。 -
我的直觉是这个问题背后有更深层次的东西。也许不是关于隐式转换,可以根据规范查找和争论,而是关于“实际表示”。也许在沿着
double x = *(reinterpret_cast<double*>>(&someBool));的行的骇人听闻的扭曲过程中会发生什么(即当残酷地暴露实际表示时 - 不确定我脑海中的确切语法,或者它是否会在某些时候导致 UB ......) -
FWIW,看起来this paper 很可能会进入标准,此时 0 和 1 将是唯一允许的真假表示。