如果不使用'&&'的语句是否有效?

Bha*_*rya 0 c++ expression-evaluation

int n = 5;    
if(2<=n<=20) 
 {
  cout << "hello";
 }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,它没有给出错误,它成功运行并且给出“ hello”作为输出。

但是我们必须使用&&这种方程式。
谁能解释一下?

Rei*_*ica 12

<=在C ++中为左关联,因此将表达式解析为((2 <= n) <= 20)2 <= n类型为bool,可以隐式转换为inttrue转换为,1然后false转换为0

这两个都是<= 20,因此条件始终有效。


注意,以上假设n是一个int或另一个原始数值类型。如果n是具有operator <=重载的用户定义类,则关联性位仍然为true,但是基于该重载运算符的返回类型和语义,有关隐式转换的部分可能适用也可能不适用。