switch ejemplos c++ if-statement evaluation

switch - if c++ ejemplos



¿Cómo se evalúa if statement en c++? (7)

Es más como if ( c != 0 )

Por supuesto != operador puede estar sobrecargado, por lo que no es perfectamente exacto decir que esos son exactamente iguales.

¿Es if ( c ) lo mismo que if ( c == 0 ) en C ++?


Esto solo es cierto para valores numéricos. si c es una clase, debe haber un operador sobrecargado que realice conversión booleana, como aquí:

#include <stdio.h> class c_type { public: operator bool() { return true; } }; int main() { c_type c; if (c) printf("true"); if (!c) printf ("false"); }


No, if (c) es lo mismo que if (c != 0) . Y if (!c) es lo mismo que if (c == 0) .


Sí, son lo mismo si cambia == 0 a != 0 .


Saldré del paquete en este ... " if (c) " está más cerca de " if (((bool)c) == true) ". Para tipos enteros, esto significa " if (c != 0) ". Como han señalado otros, sobrecargar al operator != Puede causar cierta extrañeza, pero también puede sobrecargar el " operator bool() " a menos que esté equivocado.


Si c es un puntero, entonces la prueba

if ( c )

no es lo mismo que

if ( c != 0 )

Esta última es una verificación directa de c contra el puntero 0 (nulo), mientras que la primera es en realidad una instrucción para verificar si c apunta a un objeto válido. Sin embargo, los compiladores producen el mismo código.


Si c es un puntero o un valor numérico,

if( c )

es equivalente a

if( c != 0 )

Si c es un booleano (escriba bool [only C ++]), (edit: o un tipo definido por el usuario con la sobrecarga del operador bool ())

if( c )

es equivalente a

if( c == true )

Si c es ni un puntero ni un valor numérico ni un booleano,

if( c )

no compilará