192 votes

Puis-je utiliser if(pointer) au lieu d’if (pointeur ! = NULL) ?

Est-il sécuritaire vérifier un pointeur vers n’étant ne pas en écrivant simplement ou ce que je dois utiliser `` ?

224voto

Joni Points 46728

Vous pouvez; le pointeur null est implicitement converti en booléen false, tandis que les non-pointeurs null sont convertis en vrai. Depuis le C++11 standard, la section sur Boolean Conversions:

Un prvalue de l'arithmétique, non délimité énumération, pointeur, ou un pointeur de type de membre peut être converti en prvalue de type bool. Une valeur de zéro, la valeur de pointeur null, ou null pointeur de membre de la valeur est convertie en false; toute autre valeur est convertie en une true . Un prvalue de type std::nullptr_t peut être converti en prvalue de type bool ; la valeur obtenue est false .

46voto

billz Points 28166

Oui, vous pouvez.

  • Pointeur Null est convertie implicitement faux
  • Pointeur Non Null est converti à la vraie.

C'est une partie de C++ standard de conversion, qui s'inscrit dans Boolean clause de conversion.

§ 4.12 Boolean conversions

Un prvalue de l'arithmétique, non délimité énumération, pointeur, ou un pointeur de type de membre peut être converti en prvalue de type bool. Une valeur de zéro, la valeur de pointeur null, ou null membre de la valeur du pointeur est converti à faux; toute autre valeur est convertie en vrai. Un prvalue de type std::nullptr_t peut être converti en prvalue de type bool; la valeur est false.

35voto

Yu Hao Points 40603

Si, tu peux. En fait, je préfère utiliser `` car il est plus simple à lire et à écrire une fois que vous vous habituez à elle.

Notez également que C ++11 introduit qui est préféré au .

17voto

Grijesh Chauhan Points 28442

Question est posée, mais je voudrais ajouter mes points.

Je préfère toujours if(pointer) au lieu de if(pointer != NULL) et if(!pointer) au lieu de if(pointer == NULL):

  • C'est simple, petit
  • Moins de chances d'écrire un code bogué, suppose que si j'ai mal orthographié contrôle d'égalité de l'opérateur == avec =
    if(pointer == NULL) peut être mal orthographié if(pointer = NULL) Donc je vais l'éviter, le mieux c'est juste if(pointer).
    (J'ai également suggéré certaines Yoda condition en une seule réponse, mais qui est différente de la matière)

  • De même, pour l' while (node != NULL && node->data == key), je vais simplement écrire while (node && node->data == key) qui est plus évident pour moi (montre que l'utilisation de court-circuit).

  • (peut-être stupide raison) Parce que la valeur NULL est une macro, si supposons que quelqu'un redéfinir par erreur avec une autre valeur.

8voto

dasblinkenlight Points 264350

Si, tu peux. La possibilité de comparer les valeurs à zéro implicitement a été héritée de C et y a-t-il dans toutes les versions de C++. Vous pouvez également utiliser `` pour vérifier les pointeurs NULL.

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