1

下面这段代码看起来很简单。我不明白为什么它不起作用。

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?");
}   

请问stackoverflow的C++向导可以来救我吗?

4

2 回答 2

4

这就是发生的事情:首先

bound_min <= my_variable

然后结果(假)用于下一个:

false <= bound_max

这是真的。

原因:_

由于 operator+ 的从左到右的关联性,表达式 a() + b() + c() 被解析为 (a() + b()) + c()

于 2019-12-06T05:53:56.827 回答
2

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] .
于 2019-12-06T05:58:27.773 回答