La spécification C ++ définit-elle:
- l'existence de l'opérateur 'inférieur à' pour les paramètres booléens, et si c'est le cas,
- le résultat des 4 permutations de paramètres?
En d'autres termes, les résultats des opérations suivantes sont-ils définis par la spécification?
false < false
false < true
true < false
true < true
Sur ma configuration (Centos 7, gcc 4.8.2), le code ci-dessous crache ce à quoi je m'attendais (étant donné l'historique de C de représenter faux comme 0 et vrai comme 1):
false < false = false
false < true = true
true < false = false
true < true = false
Bien que je sois à peu près sûr que la plupart (tous?) Des compilateurs donneront le même résultat, est-ce que cela est légiféré par la spécification C ++? Ou un compilateur obscur, mais conforme aux spécifications, est-il autorisé à décider que true est moins que 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
signifie p implies q
quand p
et q
sont de type booléen!
<=
pourrait être lue par inadvertance comme une flèche vers la gauche , et que la flèche de droite "seulement si" (c'est-à-dire "[matériellement] implique") est parfois composée ou écrite de manière informelle de la même manière =>
(c'est- à -dire avec un arbre doublé ressemblant à =
) . Une flèche vers la gauche est même parfois lue comme «si», même si je pense que c'est beaucoup moins courant que l'utilisation d'une flèche vers la droite pour «seulement si».
std::min
surstd::vector<bool>
as&&
.