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

时间:2018-04-17 02:22:21

标签: 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 = '?';

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

1 个答案:

答案 0 :(得分:5)

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

基于优先级(L - > R)和关联性的

(0 < x < 10)可以分解为:

(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