Maison > développement back-end > C++ > Quand devriez-vous utiliser `nullptr` en C ?

Quand devriez-vous utiliser `nullptr` en C ?

Susan Sarandon
Libérer: 2024-11-09 09:38:02
original
247 Les gens l'ont consulté

When Should You Use `nullptr` in C  ?

Quand utiliser nullptr

Dans le code C, les pointeurs peuvent être initialisés à des valeurs conceptuellement équivalentes : nullptr, NULL ou 0. Bien que ces les valeurs indiquent toutes un pointeur nul, nullptr offre plusieurs avantages.

Invocation de fonction surchargée

Considérez les fonctions surchargées suivantes :

void f(char const *ptr);
void f(int v);
Copier après la connexion

Dans le En l'absence de nullptr, l'appel suivant entraînerait une ambiguïté :

f(NULL);  //which function will be called?
Copier après la connexion

Cependant, l'utilisation de nullptr clarifie l'invocation de fonction prévue :

f(nullptr); //first function is called
Copier après la connexion

Spécialisation de modèle pour nullptr

De plus, nullptr permet une spécialisation de modèle spécifiquement pour les pointeurs nuls. Considérez le modèle suivant :

template<typename T, T *ptr>
struct something{};                     //primary template
Copier après la connexion

La spécialisation partielle suivante peut être définie pour nullptr :

template<>
struct something<nullptr_t, nullptr>>{};  //partial specialization for nullptr
Copier après la connexion

Cela permet de créer une surcharge dédiée pour gérer les arguments nullptr :

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

void f(nullptr_t); //an overload to handle nullptr argument!!!
Copier après la connexion
Copier après la connexion

Déduction de type pour nullptr

Dans les modèles, le type de nullptr est déduit comme nullptr_t. Cela simplifie le code, comme on le voit ci-dessous :

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

void f(nullptr_t); //an overload to handle nullptr argument!!!
Copier après la connexion
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal