Quelles sont les utilisations du type `std :: nullptr_t`?

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 .