在C++或從C99,如何爲布爾值定義小於運算符<
?排序的布爾值
或者,解釋這種代碼的行爲:
#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++代碼,GCC 4.6.3-ubuntu5編譯爲C代碼和G ++ 4.6.3-1ubuntu5編譯爲C++代碼中,你得到的是
false < true
也就是說,下面的不等式都是false
:
(bool)-1 < true
(bool)-1 < false
true < false
而下面是true
:
false < true
你能找到標準中定義的位置嗎?我只是看着,無法找到它(我甚至不知道要搜索什麼)。 – 2012-08-14 12:07:04
@Mansuro Irrelevant,James和我在談論C++。但即使對於C,本文檔中也沒有說明如何處理轉換'(bool)-1'。 – 2012-08-14 12:10:02
§4.5積分促銷。 「類型'bool'的右值可以轉換爲 類型爲'int'的右值,其中'false'變成零,'true'變成 之一。 (請注意,'bool'從來沒有'0'或'1'值;只有'false'和'true',這就是爲什麼我說「確切地說_as if_」)和§4.12爲 轉換爲' bool'。 – 2012-08-14 12:13:13