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

Mar*_*zek 18 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();
} 
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

2 < 5 < 9
2 < 5 and 5 < 9
2 < 1 < 9
2 < 10 < 9
Run Code Online (Sandbox Code Playgroud)

看来只能2 < e && e < 9正常工作。

Bat*_*eba 36

表达方式

2 < x < 9
Run Code Online (Sandbox Code Playgroud)

分组为

(2 < x) < 9
Run Code Online (Sandbox Code Playgroud)

而且由于2 < xfalse(0)或true(1),并且都小于9,因此始终为true

所以,除非你使用重载运营商的非内置型x(当时3路比较如果有可能2 < x是返回一个实例代理上对象<的定义),如果你想测试,如果x是在区间(2,9)您需要按照自己的方式编写。

  • 因此,这不是三向比较。 (5认同)

Lig*_*ica 20

只是因为该语言没有该功能。

可以做到这一点,但这将以不兼容的方式与C形成对比。

本可以使用C语言,但设计人员根本没有这样做。

您已经有正确的方法。

一些不同的(和更新的!)语言确实支持这一点。

  • @FedericoklezCulloca有点谬论。显然,语言设计人员已竭尽全力以确保与C的高度兼容性。不,它不是严格的超集,但实际上是非常紧密的。从根本上改变运营商的工作方式将是一个很大的禁忌。 (18认同)
  • @FedericoklezCulloca C ++经过精心设计,主要与C向后兼容。当然有些地方无法做到,但是对于这样的基本语法规则,C语言得以保留。 (2认同)