Nous avons maintenant C ++ 11 avec de nombreuses nouvelles fonctionnalités. Un nouveau intéressant et déroutant (du moins pour moi) est le nouveau nullptr
.
Eh bien, plus besoin de la méchante macro NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Pourtant, je ne comprends pas comment ça nullptr
marche. Par exemple, un article de Wikipedia dit:
C ++ 11 corrige cela en introduisant un nouveau mot clé pour servir de constante de pointeur nul distinct: nullptr. Il est de type nullptr_t , qui est implicitement convertible et comparable à tout type de pointeur ou de type pointeur sur membre. Il n'est pas implicitement convertible ou comparable aux types intégraux, à l'exception de bool.
Comment est-ce un mot-clé et une instance d'un type?
De plus, avez-vous un autre exemple (à côté de celui de Wikipedia) où nullptr
est supérieur au bon vieux 0
?
nullptr_t
garanti d'avoir un seul membre nullptr
,? Donc, si une fonction est retournée nullptr_t
, le compilateur sait déjà quelle valeur sera renvoyée, quel que soit le corps de la fonction?
std::nullptr_t
peut être instancié, mais toutes les instances seront identiques à nullptr
car le type est défini comme typedef decltype(nullptr) nullptr_t
. Je crois que la principale raison pour laquelle le type existe est pour que les fonctions puissent être surchargées spécifiquement pour intercepter nullptr
, si nécessaire. Voir ici pour un exemple.
nullptr
est également utilisé pour représenter une référence nulle pour les descripteurs gérés en C ++ / CLI.