Je propose d'ajouter un article de ce style dans la FAQ (il faudrait en plus faire une passe globale pour supprimer tous les NULL):
Faut-il utiliser 0, NULL ou nullptr pour désigner un pointeur NULL ?
À partir de C++11, il faut utiliser nullptr. Avant, les avis divergent.
- 0 est avant tout un entier. Il se trouve juste que, quand il est converti en pointeur, il retourne le pointeur nul,
- NULL est une macro équivalente à 0, qui ajoute donc aux problèmes de 0 les problèmes d'être une macro (a-t-on inclus un header qui la définit ? Et si elle a été définie autrement ?), mais est peut-être un peu plus clair dans son intention,
- nullptr est la valeur du pointeur nul, directement supportée par le langage depuis C++11.
L'intérêt d'un support direct du langage se voit particulièrement en cas de surcharge :
Des développeurs ayant modifié la définition de NULL dans du code historique pour la rendre équivalente à nullptr ont reporté que cette manipulation, parmi moult faux positifs, a permis de mettre en évidence certains bugs, qui ne seraient jamais apparus si nullptr avait pu être utilisé dès le début.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void f(char* pc) { cout << "Avec un pointeur" << endl;} void f(int i) { cout << "Avec un entier" << endl; } f(0); // Entier f(NULL); // Entier aussi f(nullptr); // Pointeur
Partager