以下程序的输出是“它们不相等”,但我希望“它们相等”作为三个比较变量 (x
,y
和 z
) 相等。为什么?
#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/