这个语法 (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
值是 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
我认为此语法 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
值是 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