我们可以在 C++ 中的 3 个变量之间使用两个运算符吗

Akh*_*rya -1 c++ inequality if-statement boolean implicit-conversion

我想比较四个整数,看看它们是否相等。于是写了下面的,

    int a = 1, b = 2, c = 3, d = 4;
    if (a != b != c != d)
    {
        //do something
    }
Run Code Online (Sandbox Code Playgroud)

这显然没有显示错误。但是,事实上,给出了错误的答案。有人可以解释一下吗?

Vla*_*cow 5

if 语句中的条件

if (a != b != c != d)
Run Code Online (Sandbox Code Playgroud)

可以等效地重写为

if ( ( ( a != b  ) != c ) != d )
Run Code Online (Sandbox Code Playgroud)

第一个子表达式的a != b计算结果为 boolean true。所以你有了

if ( ( true != c ) != d )
Run Code Online (Sandbox Code Playgroud)

子表达式true != c被隐式转换为

if ( ( 1 != c ) != d )
Run Code Online (Sandbox Code Playgroud)

这显然不是您想要的,尽管它是有效的 C++。

看来你的意思是这样的

if ( ( a != b ) && ( b != c ) && ( c != d ) )
Run Code Online (Sandbox Code Playgroud)

  • `if ( ( a != b ) && ( b != c ) && ( c != d ) )` 允许 `a == d`。`if (std::set{a, b, c, d}.size() == 4)` 似乎更合适。 (2认同)