La specifica C ++ definisce:
- l'esistenza dell'operatore "minore di" per i parametri booleani e, in tal caso,
- il risultato delle 4 permutazioni dei parametri?
In altre parole, i risultati delle seguenti operazioni sono definiti dalla specifica?
false < false
false < true
true < false
true < true
Nel mio setup (Centos 7, gcc 4.8.2), il codice qui sotto sputa quello che mi aspetterei (data la storia di C che rappresenta false come 0 e true come 1):
false < false = false
false < true = true
true < false = false
true < true = false
Mentre sono abbastanza sicuro che la maggior parte (tutti?) I compilatori daranno lo stesso output, questo è legiferato dalla specifica C ++? O è un compilatore offuscato, ma conforme alle specifiche, autorizzato a decidere che true è inferiore a false?
#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
significa p implies q
quando p
e q
sono di tipo bool!
<=
potrebbe essere inavvertitamente letto come un leftarrow, e che il "solo se" (cioè, [materialmente] implica ") rightarrow è talvolta composto o scritto in modo simile in modo simile =>
(cioè, con un albero raddoppiato simile a =
) . A volte anche un leftarrow viene letto come "se", anche se credo che questo sia molto meno comune dell'uso di un rightarrow per "solo se".
std::min
sustd::vector<bool>
come&&
.