J’ai appris que nullptr
, en plus d’être convertible en n’importe quel type de pointeur (mais pas en type intégral), possède également son propre type std::nullptr_t
. Il est donc possible d’avoir une surcharge de méthode qui accepte std::nullptr_t
.
Pourquoi une telle surcharge est-elle nécessaire?
Si plusieurs surcharges acceptent un type de pointeur, une surcharge pour std::nullptr_t
est nécessaire pour accepter un argument nullptr
. Sans la surcharge std::nullptr_t
, il serait ambigu de savoir quelle surcharge de pointeur devrait être sélectionnée lors de la transmission de nullptr
.
Exemple:
void f(int *intp) { // Passed an int pointer } void f(char *charp) { // Passed a char pointer } void f(std::nullptr_t nullp) { // Passed a null pointer }
Dans certains cas particuliers, la comparaison avec un type nullptr_t
est utile pour indiquer si un object est valide.
Par exemple, l’ operator==
et l’ operator!=
surcharges de std::function
peuvent uniquement prendre nullptr_t
tant que paramètre pour indiquer si l’object fonction est vide. Pour plus de détails, vous pouvez lire cette question .