Question

est if ( c ) le même que if ( c == 0 ) en C ++?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top