La definición de C ++ define:
- la existencia del operador 'menor que' para parámetros booleanos, y si es así,
- ¿El resultado de las 4 permutaciones de parámetros?
En otras palabras, ¿los resultados de las siguientes operaciones están definidos por la especificación?
false < false
false < true
true < false
true < true
En mi configuración (Centos 7, gcc 4.8.2), el siguiente código escupe lo que esperaría (dado el historial de C de representar falso como 0 y verdadero como 1):
false < false = false
false < true = true
true < false = false
true < true = false
Si bien estoy bastante seguro de que la mayoría de los compiladores (¿todos?) Darán el mismo resultado, ¿está esto legislado por la especificación C ++? ¿O es un ofuscador, pero el compilador que cumple con las especificaciones puede decidir que verdadero es menos que falso?
#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
cuándo p
y q
son de tipo bool!
<=
podría leerse inadvertidamente como una flecha izquierda, y que la flecha "solo si" (es decir, [implica [materialmente] ") a veces se compone de un tipo o se escribe de manera informal =>
(es decir, con un eje doble parecido =
) . Una flecha izquierda incluso se lee a veces como "si", aunque creo que esto es mucho menos común que el uso de una flecha derecha para "solo si".
std::min
enstd::vector<bool>
as&&
.