Est-il sécuritaire vérifier un pointeur vers n’étant ne pas en écrivant simplement
ou ce que je dois utiliser `` ?
Réponses
Trop de publicités?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 enfalse
; toute autre valeur est convertie en unetrue
. Un prvalue de typestd::nullptr_t
peut être converti en prvalue de typebool
; la valeur obtenue estfalse
.
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.
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 justeif(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 écrirewhile (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.