Maison >développement back-end >C++ >Pourquoi `nullptr` est-il un meilleur choix que `NULL` et `0` pour les pointeurs en C ?

Pourquoi `nullptr` est-il un meilleur choix que `NULL` et `0` pour les pointeurs en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-08 12:55:02270parcourir

Why is `nullptr` a Better Choice than `NULL` and `0` for Pointers in C  ?

Utilisation de nullptr : avantages par rapport à NULL et 0

Les pointeurs doivent être correctement initialisés pour éviter un comportement inattendu. Alors que la syntaxe int* p1 = nullptr;, int* p2 = NULL; et int* p3 = 0; peut sembler fonctionnellement équivalent, l'utilisation de nullptr présente des avantages significatifs par rapport aux deux autres options.

Résolution d'ambiguïté de surcharge :

Considérez les fonctions surchargées :

void f(char const *ptr);
void f(int v);

f(NULL);  // ambiguous function call

Avec NULL, le compilateur ne peut pas déterminer quelle fonction appeler, car il peut s'agir de f(char const *) ou de f(int). Cette ambiguïté peut conduire à des erreurs inattendues. Cependant, l'utilisation de nullptr résout cette ambiguïté :

f(nullptr); // calls f(char const *)

Spécialisation du modèle :

En C , le type de nullptr est nullptr_t. Cela permet une spécialisation de modèle pour nullptr, offrant une flexibilité inégalée :

template<typename T, T *ptr>
struct something{};                     // primary template

template<>
struct something<nullptr_t, nullptr>{};  // partial specialization for nullptr

En utilisant cette spécialisation, vous pouvez gérer les arguments nullptr de manière unique :

template<typename T>
void f(T *ptr);   // function to handle non-nullptr argument

void f(nullptr_t); // overload to handle nullptr argument

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn