Comment instruction if évaluée en c ++?
-
18-09-2019 - |
Question
est if ( c )
le même que if ( c == 0 )
en C ++?
La solution
Non, if (c)
est le même que if (c != 0)
.
Et if (!c)
est le même que if (c == 0)
.
Autres conseils
Je vais te casser du paquet sur celui-ci ... « if (c)
» est le plus proche de « if (((bool)c) == true)
». Pour les types entiers, cela signifie « if (c != 0)
». Comme d'autres l'ont souligné, la surcharge operator !=
peut causer une certaine étrangeté, mais peut donc surcharger « operator bool()
» à moins que je me trompe.
Si c est un pointeur ou une valeur numérique,
if( c )
est équivalent à
if( c != 0 )
Si c est une valeur booléenne (type bool [C ++ uniquement]), (Edit: ou d'un type défini par l'utilisateur avec la surcharge de l'opérateur bool ())
if( c )
est équivalent à
if( c == true )
Si c est ni un pointeur ou une valeur numérique ni un booléen,
if( c )
ne compilera pas.
Il est plus comme if ( c != 0 )
Bien sûr, opérateur !=
peut être surchargée si ce n'est pas tout à fait exact de dire que ce sont exactement égaux.
Ceci est vrai que pour les valeurs numériques. si c est classe, il doit y avoir un opérateur surchargé qui ne booléen de conversion, comme ici:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
Oui, ils sont les mêmes si vous changez == 0
à != 0
.
Si c
est un pointeur le test
if ( c )
est pas tout à fait la même chose que
if ( c != 0 )
Ce dernier est un contrôle simple des c
contre le pointeur 0
(null) alors que le premier est en fait une instruction pour vérifier si c
est pointe vers un objet valide. compilateurs généralement produire le même code que.