web-dev-qa-db-fra.com

NULL vs nullptr (Pourquoi a-t-il été remplacé?)

Je sais qu'en C++, 0x ou NULL a été remplacé par nullptr dans les applications basées sur un pointeur. Je suis juste curieux de savoir pourquoi ils ont fait ce remplacement?

Dans quel scénario l'utilisation de nullptr sur NULL est-elle bénéfique pour les pointeurs?

173
Riptyde4

nullptr est toujours un type de pointeur. 0 (NULL de C, ponté en C++) pourrait causer une ambiguïté dans la résolution des fonctions surchargées, entre autres:

f(int);
f(foo *);
244
Joe Z

Vous pouvez trouver une bonne explication de la raison pour laquelle il a été remplacé par la lecture n nom pour le pointeur null: nullptr , pour citer le papier:

Ce problème entre dans les catégories suivantes:

  • Améliorez la prise en charge de la création de bibliothèques en offrant aux utilisateurs un moyen d'écrire du code moins ambigu, de sorte que les rédacteurs de bibliothèque ne soient pas obligés, au fil du temps, de craindre une surcharge des types intégral et pointeur.

  • Améliorez la prise en charge de la programmation générique en facilitant l’expression sans ambiguïté des nombres entiers 0 et nullptr.

  • Rendre le C++ plus facile à enseigner et à apprendre.

56
Shafik Yaghmour

Voici le libellé de Bjarne Stroustrup,

En C++, la définition de NULL est 0, il n'y a donc qu'une différence esthétique. Je préfère éviter les macros, donc j'utilise 0. Un autre problème de NULL est que les gens croient parfois à tort qu'il est différent de 0 et/ou non d'un entier. Dans le code pré-standard, NULL était/est parfois défini comme quelque chose d'inapproprié et devait donc/doit être évité. C'est moins commun ces jours-ci.

Si vous devez nommer le pointeur null, appelez-le nullptr; c'est ce qu'on appelle en C++ 11. Ensuite, "nullptr" sera un mot clé.

31
Deidrei

Une des raisons: le littéral 0 a une mauvaise tendance à acquérir le type int, par ex. dans l'argumentation parfaite ou plus généralement en tant qu'argument avec un type basé sur un modèle.

Une autre raison: la lisibilité et la clarté du code.

12