Definiert die C ++ - Spezifikation:
- die Existenz des Operators 'kleiner als' für boolesche Parameter, und wenn ja,
- das Ergebnis der 4 Parameter Permutationen?
Mit anderen Worten, sind die Ergebnisse der folgenden Operationen durch die Spezifikation definiert?
false < false
false < true
true < false
true < true
In meinem Setup (Centos 7, gcc 4.8.2) spuckt der folgende Code aus, was ich erwarten würde (angesichts der Geschichte von C, in der false als 0 und true als 1 dargestellt wird):
false < false = false
false < true = true
true < false = false
true < true = false
Obwohl ich mir ziemlich sicher bin, dass die meisten (alle?) Compiler die gleiche Ausgabe liefern, ist dies in der C ++ - Spezifikation gesetzlich geregelt? Oder darf ein verschleierter, aber spezifikationskonformer Compiler entscheiden, dass wahr weniger als falsch ist?
#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
Mittel , p implies q
wenn p
und q
vom Typ Bool ist!
<=
dies versehentlich als linker Pfeil gelesen werden kann und dass der "nur wenn" (dh "[materiell] impliziert") rechte Pfeil manchmal ähnlich gesetzt oder informell geschrieben ist wie =>
(dh mit einem doppelten Schaft ähnlich =
). . Ein linker Pfeil wird sogar manchmal als "wenn" gelesen, obwohl ich glaube, dass dies weitaus seltener ist als die Verwendung eines rechten Pfeils für "nur wenn".
std::min
aufstd::vector<bool>
wie&&
.