快速总结一下,为什么不 2 < x < 9
等于 2 < x && x < 9
?
这是我写的测试代码:
#include <iostream>
int main()
{
int nums[] = { 5 , 1, 10};
// We are gonna check if the number is in the range 2 - 9
for (auto e : nums)
{
if (2 < e < 9)
std::cout << "2 < " << e << " < 9" << std::endl;
if(2 < e && e < 9)
std::cout << "2 < " << e << " and " << e << " < 9" << std::endl;
}
std::cin.get();
}
这是我得到的输出:
2 < 5 < 9
2 < 5 and 5 < 9
2 < 1 < 9
2 < 10 < 9
看起来只有 2 < e && e < 9
工作正常。
最佳答案
表达式
2 < x < 9
被分组为
(2 < x) < 9
自从 2 < x
是 false
(0) 或 true
(1),并且两者都小于 9,它总是 true
.
所以除非你对非内置类型使用重载运算符x
(如果 2 < x
返回定义了 <
的 proxy 对象的实例,则可以进行三向比较 ),如果您想测试是否 x
在区间 (2, 9) 中你需要按你的方式写。
关于c++ - 为什么我们不能在 C++ 中进行三向比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56526264/