为什么以下不等式在C++计算为真?



下面的代码段看起来很琐碎。我不明白为什么它不起作用。

float bound_min   = +314.53f;
float bound_max   = +413.09f;
float my_variable = -417.68f;
if (bound_min <= my_variable <= bound_max)
{
printf("Why on earth is this returning True?");
}   

栈溢出的C++巫师可以来救我吗?

这是发生的情况: 第一

bound_min <= my_variable

然后结果 (false( 用于下一个:

false <= bound_max

这是真的。

原因:

表达式 a(( + b(( + c(( 解析为 (a(( + b((

( + c((,原因是 运算符从左到右关联性+

if 语句中的条件

if (bound_min <= my_variable <= bound_max)

相当于

if ( ( bound_min <= my_variable ) <= bound_max)

第一个子表达式( bound_min <= my_variable )计算结果为布尔值 false。

因此,您有

if ( false  <= bound_max)

在此结果表达式中,由于积分提升,布尔false被转换为整数0

if ( 0 <= bound_max)

所以条件的最终值是true.

从 C++ 17 标准(8.9 关系运算符(

1 关系运算符从左到右分组。

[Example: a<b<c means (a<b)<c and not (a<b)&&(b<c) —end example] .

最新更新