【发布时间】:2011-08-21 19:08:21
【问题描述】:
我不假思索地写了一些代码来检查结构的所有值是否都设置为 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 编译了代码。
【问题讨论】:
-
您无意中发现了积分促销规则。布尔值可以提升为整数,因此测试
bool == int是有效的......即使非常违反直觉。啊! -
请注意,'a == b == c == d == 0' 适用于 Python。
标签: c++ c compiler-construction boolean operator-precedence