在C++或C99的<stdbool.h>
中,布尔值的小于运算符<
如何定义?
或者,解释以下代码的行为:
#ifndef __cplusplus
#include <stdbool.h>
#endif
#include <stdio.h>
int main() {
bool b = -1;
if(b < true) {
printf("b < true\n");
}
if(b < false) {
printf("b < false\n");
}
if(true < false) {
printf("true < false\n");
}
if(false < true) {
printf("false < true\n");
}
}
在 MSVC 版本 10 下,编译为 C++ 代码时,在 Ubuntu5 编译的 GCC 4.6.3 编译为 C 代码以及在 Ubuntu5 编译的 G++ 4.6.3 中编译为 C++ 代码,你只会得到:false < true
也就是说,以下不等式都是false
:
(bool)-1 < true
(bool)-1 < false
true < false
以下内容true
:
false < true
(bool) -1
。 - Konrad Rudolphbool
的右值可以转换为类型为int
的右值,其中false
变为零,true
变为一。"(请注意,bool
永远不会有值为0
或1
的情况;只有false
和true
。这就是我说“就像”的原因。)而§4.12则用于转换为bool
。 - James Kanzebool
类型没有实际排序。与许多其他操作一样,根据上述规则将其提升为int
,然后比较两个int
的值。 - David Rodríguez - dribeas