这种语法(0 <x <10)在C++中做什么?

Sta*_*ght 0 c++ operators

我认为这种语法0 < x < 10与这种语法相同0 < x && x < 10.但是,今天,我的计划证明我错了.通常,我不会问这类问题,做0 < x < 10什么?但编译器接受它,所以我希望它有某种功能.

这是我的代码的一部分:

if (0 <= grade < 59)
        letter = 'F';
    else if (60 <= grade < 69)
        letter = 'D';
    else if (70 <= grade < 79)
        letter = 'C';
    else if (80 <= grade < 89)
        letter = 'B';
    else if (90 <= grade <= 100)
        letter = 'A';
    else
        letter = '?';
Run Code Online (Sandbox Code Playgroud)

结果总是返回letter ='F',所以我认为编译器只考虑0 <= grade条件.但是,如果这是编译器工作的方式,letter那么?当我指定char值或负数时应该相等.但事实并非如此.所以我真的很困惑编译器的错误和'编译器的功能',因为如果它是什么0 < x < 10呢?

Jos*_* D. 5

所以基本上,你需要检查的是运算符优先级和关联性.

(0 < x < 10),基于优先级(L - > R)和关联性,可以分为:

(0 < x)产生一种bool类型

那么,bool < 10 (int)这总是如此

一个重要的注意事项是,因为bool值是0或者1,编译器会想要将它推导为int:

int grade = 10;
std::cout << (0 < grade < 0); // false
std::cout << (0 < grade < 1); // false
std::cout << (0 < grade < 2); // true

typeid((0 < grade)).name();   // b
Run Code Online (Sandbox Code Playgroud)