Est-ce que if ( c )
est identique à if ( c == 0 )
en C++?
Non, if (c)
est identique à if (c != 0)
. Et if (!c)
est identique à if (c == 0)
.
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.
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.
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.
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");
}