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 nullptrmarche. 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ù nullptrest supérieur au bon vieux 0?
nullptr_tgaranti 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_tpeut être instancié, mais toutes les instances seront identiques à nullptrcar 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.
nullptrest également utilisé pour représenter une référence nulle pour les descripteurs gérés en C ++ / CLI.