c++ - 为什么我们不能在 C++ 中进行三向比较?

标签 c++

快速总结一下,为什么不 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 < xfalse (0) 或 true (1),并且两者都小于 9,它总是 true .

所以除非你对非内置类型使用重载运算符x (如果 2 < x 返回定义了 <proxy 对象的实例,则可以进行三向比较 ),如果您想测试是否 x在区间 (2, 9) 中你需要按你的方式写。

关于c++ - 为什么我们不能在 C++ 中进行三向比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56526264/

相关文章:

c++ - 在 C++ 中的类初始化程序中初始化 const 数组

PHP 析构函数和与 C++ 析构函数的关系?

c++ - Windows 上的链接 boost 问题

c++ - 准确地创建范围 [a,b) 中的浮点值

c++ - 跨平台内存分配器 sbrk/virtualalloc

c++ - C++ 中的全局对象

c++ - Solaris 9 上的 printf + uint64?

c++ - 在 Windows 上包含 sys/times.h 的替代方法是什么?

c++ - __int64 的奇怪列表输出

c# - 一元加号运算符有什么作用?