c++ - 链接 boolean 值给出与预期相反的结果

标签 c++ c compiler-construction boolean operator-precedence

我不假思索地编写了一些代码来检查结构的所有值是否都设置为 0。为此我使用了:

bool IsValid() {
    return !(0 == year == month == day == hour == minute == second);
}

其中所有结构成员都是无符号短类型。我将代码用作更大测试的一部分,但注意到它对于不为零的值返回 false,对于所有等于零的值返回 true - 与我的预期相反。

我把代码改成了:

bool IsValid() {
    return (0 != year) || (0 != month) || (0 != day) || (0 != hour) || (0 != minute) || (0 != second);
}

但想知道是什么导致了奇怪的行为。是优先的结果吗?我试过用谷歌搜索这个答案,但什么也没找到,如果有任何命名法来描述我很想知道的结果。

我使用 VS9 和 VS8 编译了代码。

最佳答案

== 从左到右分组,因此如果所有值都为零,则:

0 == year // true
(0 == year) == month // false, since month is 0 and (0 == year) converts to 1
((0 == year) == month) == day // true

等等。

一般来说, x == y == z not 等同于 x == y && x == z 如你所见期待。

关于c++ - 链接 boolean 值给出与预期相反的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939077/

相关文章:

C编程,自上而下,出发时间

c - C 中指针的加法

C 实现可以使用长度前缀字符串 "under the hood"吗?

c++ - 使用字符串引用

c++ - glad.h 给出包含 opengl header 的错误

c++ - 如何在基于 MFC 对话框的应用程序中使用计时器?

java - 枚举超过静态初始化程序的 65535 字节限制......最好做什么?

C++ 编译和文件大小

c++ - 内存不足的概念

c++ - 加载 "big"纹理文件时出现段错误