Évaluation du pointeur dans les instructions conditionnelles
Lors de l'évaluation d'un pointeur dans une instruction conditionnelle, vous pouvez vous demander si l'expression if (pointeur) est suffisante ou si if (pointer != NULL) est nécessaire.
Le piège du pointeur nul
L'approche traditionnelle, utilisant if (pointer != NULL), vérifie explicitement si le pointeur n'est pas égal à la valeur du pointeur nul (NULL). Cependant, cette approche repose sur l'hypothèse que NULL est défini et a une valeur spécifique, qui peut varier en fonction de la plateforme et du langage de programmation.
Conversion booléenne implicite
C 11 a introduit un mécanisme qui simplifie l'évaluation du pointeur dans les instructions conditionnelles. Le pointeur nul est implicitement converti en valeur booléenne false, tandis que les pointeurs non nuls sont convertis en vrai. Cela signifie que l'expression if (pointer) est fonctionnellement équivalente à if (pointer != NULL) tant que le pointeur n'est pas de type std::nullptr_t.
Section sur les conversions booléennes
Selon la norme C 11, section sur les conversions booléennes :
"Une prvalue arithmétique, une énumération sans portée, un pointeur ou un pointeur vers un type de membre peut être convertie en une prvalue de type bool. Une valeur nulle, une valeur de pointeur nulle ou une valeur de pointeur de membre nulle est convertie en faux ; toute autre valeur est convertie en vrai."
Conclusion
En C 11 et plus tard, vous pourrez utiliser en toute sécurité if (pointer) au lieu de if (pointer != NULL) pour vérifier si un pointeur n'est pas nul. Cependant, si vous utilisez std::nullptr_t, vous devez vous en tenir à la comparaison explicite if (pointer != nullptr) pour garantir une évaluation correcte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!