7 votes

Pourquoi/quand utiliser (!!p) au lieu de (p != NULL)

Dans le code suivant, quel est l'avantage d'utiliser la fonction (!!p) au lieu de (p != NULL) ?

AClass *p = getInstanceOfAClass();
if( !!p )
  // do something
else 
  // do something without having valid pointer

-1voto

Cătălin Pitiș Points 10520

Ils sont identiques, mais je recommande d'utiliser

NULL != p

Il est plus lisible.

-1voto

Matt Joiner Points 29194

Il n'y a pas de différence dans l'exemple donné.

Cependant, l'hypothèse selon laquelle cela s'applique à tous les cas est incorrecte. a = pas pas b n'est pas la même chose que a = b en ce qui concerne les types d'entiers.

En C, 0 est fausse. Tout ce qui n'est pas 0 est vrai. Mais not 0 es 1 et rien d'autre. En C++, true est converti en 1 comme un nombre entier, non seulement pour des raisons de compatibilité avec le C, mais aussi parce que 1 n'est pas 0 y 1 est la valeur la plus couramment utilisée pour indiquer vrai dans les types bools en C, y compris la fonction type officiel C bool y BOOL utilisé dans Win32.

Alors que pour l'exemple de code donné, !!p n'est pas nécessaire car le résultat est converti en un bool pour l'évaluation de la if cela n'exclut pas l'utilisation de la !! dans le but de convertir les booléens en valeurs entières attendues. Personnellement, dans cet exemple, pour maximiser la probabilité que les changements de type et la sémantique soient clairs, j'utiliserais NULL != p o p != NULL pour que le sens soit absolument clair.

Cette technique est connue sous le nom d'idiome double-bang, et ce type fournit quelques bonnes justifications .

-2voto

Pasi Savolainen Points 1489

N'utilisez PAS la double négation. Un argument simple est que, puisque le C++ est un sous-ensemble limité de l'anglais et que l'anglais n'a pas de double négation, les anglophones auront beaucoup de difficultés à comprendre ce qui se passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X