我有以下代码。它说明了我遇到的问题。为什么比较不评估为真?这是整数和浮点比较的限制吗?
#include <iostream>
int main(){
double m = -0.625;
if((-1)<=m<=0){
std::cout << "Enter here" <<std::endl;
}
return 0;
}
答案 0 :(得分:2)
你不能像在C中那样进行三方比较。将它改为以下,它将起作用:
if((-1) <= m && m <= 0){
std::cout << "Enter here" <<std::endl;
}
答案 1 :(得分:0)
此if语句中的条件
if( ( -1 ) <= m <= 0 ){
相当于
if( ( -1 <= m ) < = 0 ){
当-1
小于m
时,子表达式( -1 <= m )
在C中产生1,在C ++中产生true
,然后转换为1,子表达式{{1}在C中产生1 <= 0
,在C ++中产生0
..
要获得预期的结果,您应该改为编写
false
答案 2 :(得分:0)
在C ++中-1 <= m <= 0
相当于(-1 <= m) <= 0
。
在此示例中,-1
被隐式转换为float
,以便将<=
运算符与m
一起使用。该表达式的结果是bool
。然后,此结果会隐式转换为int
,以便将<=
运算符与0
一起使用。由于bool转换为0
或1
(false
或true
),因此当m
小于{{{}时,此条件语句才会生效1}}。
从数学的角度来看,构造if语句是有道理的,但是你必须明确地将其分解,以便编译器知道你想要什么。
试试这个
-1