Czy specyfikacja C ++ definiuje:
- istnienie operatora „mniejsze niż” dla parametrów logicznych, a jeśli tak,
- wynik permutacji 4 parametrów?
Innymi słowy, czy wyniki następujących operacji są zdefiniowane w specyfikacji?
false < false
false < true
true < false
true < true
W mojej konfiguracji (Centos 7, gcc 4.8.2) poniższy kod wypluwa to, czego bym się spodziewał (biorąc pod uwagę historię C reprezentowania fałszu jako 0 i prawdy jako 1):
false < false = false
false < true = true
true < false = false
true < true = false
Chociaż jestem prawie pewien, że większość (wszystkich?) Kompilatorów da takie same dane wyjściowe, czy jest to uregulowane w specyfikacji C ++? A może zaciemniający, ale zgodny ze specyfikacją kompilator może zdecydować, że prawda jest mniejsza niż fałsz?
#include <iostream>
const char * s(bool a)
{
return (a ? "true" : "false");
}
void test(bool a, bool b)
{
std::cout << s(a) << " < " << s(b) << " = " << s(a < b) << std::endl;
}
int main(int argc, char* argv[])
{
test(false, false);
test(false, true);
test(true, false);
test(true, true);
return 0;
}
p <= q
środki p implies q
kiedy p
i q
są typu BOOL!
<=
może być przypadkowo odczytane jako strzałka w lewo i że „tylko jeśli” (tj. „[Materialnie] sugeruje”) strzałka w prawo jest czasami składana lub nieformalnie zapisywana podobnie do =>
(tj. Z podwójnym trzonem przypominającym =
) . Czasami nawet czyta się lewą strzałkę jako „jeśli”, chociaż uważam, że jest to znacznie mniej powszechne niż użycie prawej strzałki dla określenia „tylko jeśli”.
std::min
nastd::vector<bool>
co&&
.