Sí. Para tipos integrales, !
devuelve true
si el operando es cero y false
de lo contrario.
Así que !b
aquí solo significa b == 0
.
Este es un caso particular en que un valor se convierte a un bool
. El !b
se puede ver como !((bool)b)
por lo que la pregunta es cuál es la "veracidad" de b
. En C++, los tipos aritméticos, tipos de punteros y enum se pueden convertir a bool
. Cuando el valor es 0 o nulo, el resultado es false
, de lo contrario es true
(C++ §4.1.2).
Por supuesto clases personalizadas, incluso puede sobrecargar el operator!
o operator
< tipos se pueden convertir a bool> para permitir que el !b
para sus clases. Por ejemplo, std::stream
ha sobrecargado el operator!
y operator void*
para comprobar la failbit, de manera que los modismos como
while (std::cin >> x) { // <-- conversion to bool needed here
...
se puede utilizar.
(Pero su código !(a > b && b <= c) || a > c && !b
es sólo críptica.)
este es un código críptico, no fácil de leer, con un nombre sin sentido para las variables. 'd =! (a> b && b <= c) || a > c && !b;' Por favor, programe limpiamente: Elija buenos nombres, y no multiplique la operación numerosa en una sola línea. –
@Stephane: "alguien me mostró esto". Si el interlocutor no lo hizo escriba el código, ¿cómo llevar a cabo sus instrucciones? Da la casualidad, solo el '! b' es relevante para la pregunta, por lo que el resto podría descartarse, pero dado que el interlocutor no entiende el operador'! ', esto podría no ser obvio. –
@Steve.De acuerdo, pero me he encontrado con esos nombres de variables tan a menudo ... –