这个语法 (0 < x < 10) 在 C++ 中有什么作用?

What does this syntax (0 < x < 10) do in C++?

我认为此语法 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 = '?';

结果总是returnsletter ='F',所以我以为编译器只把0 <= grade当作条件。但是,如果这就是编译器的工作方式,那么当我分配 char 值或负数时 letter 应该等于 ?。然而事实并非如此。所以我真的混淆了编译器的错误和 'function of compiler' 因为如果是那么 0 < x < 10 会做什么?

所以基本上,您需要检查的是运算符优先级和结合性。

(0 < x < 10),根据优先级(L -> R)和结合律,可以分解为:

(0 < x) 产生 bool 类型

那么,bool < 10 (int) 总是 true

一个重要的注意事项是,由于 bool 值是 01,编译器会想将其推导为 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