Порядок логических значений

В C++ или <stdbool.h>из 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
17
задан Bill the Lizard 14 August 2012 в 13:02
поделиться