c++ - 为什么用 == 比较三个变量会得出 false?

标签 c++

以下程序的输出是“它们不相等”,但我希望“它们相等”作为三个比较变量 (x,yz) 相等。为什么?

#include <iostream>

int main()
{
    int y, x, z;
    y = 3;
    x = 3;
    z = 3;

    if (x == y == z)
    {
        std::cout << "they are equal\n";
    }
    else
    {
        std::cout << "they are not equal\n";
    }
}

最佳答案

这是因为表达式和类型的求值方式所致。

让我们评估最左边的==

x == y ...

此结果为 true。让我们重写表达式:

//  x == y
if (true   == z) {
    // ...
}

true 是一个 bool 值。 bool 值不能直接与 int 进行比较。必须进行从 bool 值到整数的转换,结果为 1(是的,true == 1)。让我们将表达式重写为其等效值:

//  true
if (1    == z) {
    //    ^--- that's false
}

但是z不等于1。这种说法是错误的!

相反,您应该分隔两个 bool 表达式:

if (x == y && y == z) {
    // ...
}

关于c++ - 为什么用 == 比较三个变量会得出 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58271178/

相关文章:

c++ - 创建对象作为私有(private)成员变量与在成员函数中

c++ - 静态链接 MFC 时未修改的 Visual Studio 2012 MFC 模板中的链接错误

c++ - C++ 根据数组长度写入数据

java - 我需要能够在 eclipse 中找到行号和方法名称

c++ - C++中运算符重载的这些方法的区别

C++:提取 boost::variant 元素的大小

c++ - 析构函数必须做与构造函数对静态成员所做的相反的事情吗?

c++ - 如何在方案中按键

c++ - 空 shared_ptr 的语义

c++ - 在 C++ 中接收未知大小的数组