Pregunta

pregunta extraña, pero alguien me mostró esto, Me preguntaba se puede utilizar el no! operador de int en C ++? (Su extraña para mí).

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}
¿Fue útil?

Solución

Sí. Para los tipos de integrales, devoluciones ! true si el operando es cero, y false lo contrario.

Así !b aquí sólo 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) así que la pregunta es ¿cuál es la "truthness" de b. En C ++, tipos aritméticos, tipos de puntero 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 << em> tipos se pueden convertir a bool > 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
  ...

puede ser utilizado.

(Pero su !( a > b && b <= c) || a > c && !b código es simplemente críptica.)

Otros consejos

Originalmente, en C (en el que C ++ se basa) no había ningún tipo booleano. En su lugar, se le asigna el valor "verdadero" a cualquier valor que no sea cero y el valor "falso" fue asignado a cualquier cosa que evalúa a cero. Este comportamiento todavía existe en C ++. Así que para una int x, las expresiones !x medios "x no es verdad", que es "x no distinto de cero", es decir que es verdad si x es cero.

Puede, !b es equivalente a (b == 0).

La prueba para int es cierto para los no valores cero y falso para valores cero, por lo que no es sólo cierto para los valores cero y falso para los no valores cero.

La acumulación en el operador ! convierte su argumento bool. Previsto por la norma que existe una conversión de cualquier tipo aritmético (int, char, .... float, double ...) a bool . Si el valor de la fuente es 0 el resultado es true, de lo contrario es false

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top