web-dev-qa-db-fra.com

Comment l'instruction if est-elle évaluée en C ++?

Est-ce que if ( c ) est identique à if ( c == 0 ) en C++?

36
derrdji

Non, if (c) est identique à if (c != 0). Et if (!c) est identique à if (c == 0).

59
Jesper

Je vais rompre avec 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 de operator != Peut provoquer une certaine étrangeté, mais peut aussi surcharger "operator bool()" à moins que je ne me trompe.

23
D.Shawley

Si c est un pointeur ou une valeur numérique,

if( c )

est équivalent à

if( c != 0 )

Si c est un booléen (type bool [uniquement C++]), (edit: ou un type défini par l'utilisateur avec la surcharge de l'opérateur bool ())

if( c )

est équivalent à

if( c == true )

Si c n'est ni un pointeur ni une valeur numérique ni un booléen,

if( c )

ne compilera pas.

6
Patrice Bernassola

C'est plus comme if ( c != 0 )

Bien sûr, != peut être surchargé, il n'est donc pas parfaitement exact de dire que ceux-ci sont exactement égaux.

3
Mehrdad Afshari

Cela n'est vrai que pour les valeurs numériques. si c est une classe, il doit y avoir un opérateur surchargé qui effectue la conversion booléenne, 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");
}
0
galets