70 votes

Pourquoi ne pas appeler nullptr NULL?

En C++11 nullptr mot-clé a été ajoutée en tant que plus sécurisée de type pointeur null constante, depuis la précédente définition commune de l' NULL 0 a quelques problèmes.

Pourquoi le comité des normes de choisir de ne pas appeler le nouveau pointeur null constante NULL, ou de déclarer qu' NULL devrait être #defined à nullptr?

73voto

Baum mit Augen Points 3571

Stephan Lavavej (membre de la norme C++ comité) a expliqué que, une fois dans un talk (55:35):

Alors que l'application est autorisée à #define NULL nullptr, elle allait se briser tout à fait certains usages comme la

int i = NULL;

et apparemment il y a beaucoup de ceux-ci. Donc, ils ne pouvaient pas la force de le changer.

43voto

Kiloreux Points 862

nullptr est de type pointeur , alors que NULL a tendance à être un entier, et parfois dans les fonctions surchargées, vous devez être clair que vous êtes à l'aide d'un pointeur et un entier - c'est quandnullptr vient dans maniable.

A côté de cela,

cochez cette de Bjarne Stroustrup du site web

Dois-je utiliser la valeur NULL ou 0?

En C++, la définition de la valeur NULL est égal à 0, donc il y a seulement une esthétique différence. Je préfère éviter les macros, j'ai donc utiliser 0. Un autre problème avec La valeur NULL est que parfois les gens croient à tort que c'est différent de 0 et/ou non un entier. Dans le pré-code standard, NULL était/est parfois définis à quelque chose d'impropre et donc a/a à être évitée. C'est moins fréquent de nos jours. Si vous avez le nom de la valeur null pointeur, l'appeler à nullptr; c'est ce qu'on appelle en C++11. Ensuite, "nullptr" est un mot-clé.

9voto

Calvin Points 923

NULL n'est pas sécurisé. Pour des raisons historiques, il a été défini comme 0 sans casting, et le compilateur silence avertissement de casting nombre de pointeur sur cette spéciale zéro.

Pour l'instant, vous pouvez le faire:

void* p = 0;

mais pas sans conversion implicite:

void* p = 1234;

l'effet secondaire est qu'il peut être abusé comme nombre de valeurs, comme d'autres de réponse mentionné.

nullptr améliorer ce par la mise en œuvre en est un pointeur, vous ne pouvez pas attribuer cela à un entier. Puisque le comportement est modifié, un nouveau nom est créé pour assurer la compatibilité ascendante.

À noter également que, nullptr est gérée par le compilateur, de sa valeur réelle n'est pas exposé à l'utilisateur (comme zéro en cas d' NULL). Il est beaucoup plus facile d'avoir dépendants de l'architecture de valeur, disons 0xdeadbeef, sans affecter le programmeur du code de la logique.

8voto

Mats Petersson Points 70074

Sans réellement assis dans le débat en commission des normes, il est difficile de le dire, mais je pense que parce qu'il allait se casser un code qui utilise NULL dans un sens où l' nullptr n'est pas suffisamment compatibles. Et la rupture de l'ancien code n'est jamais une bonne idée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X