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.