Wir haben jetzt C ++ 11 mit vielen neuen Funktionen. Eine interessante und verwirrende (zumindest für mich) ist die neue nullptr
.
Nun, das böse Makro ist nicht mehr nötig NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Trotzdem verstehe ich nicht, wie es nullptr
funktioniert. Zum Beispiel sagt der Wikipedia-Artikel :
C ++ 11 korrigiert dies, indem ein neues Schlüsselwort eingeführt wird , das als definierte Nullzeigerkonstante dient: nullptr. Es ist vom Typ nullptr_t , der implizit konvertierbar und mit jedem Zeigertyp oder Zeiger-zu- Element -Typ vergleichbar ist. Es ist nicht implizit konvertierbar oder mit integralen Typen vergleichbar, außer für bool.
Wie ist es ein Schlüsselwort und eine Instanz eines Typs?
Haben Sie auch ein anderes Beispiel (neben dem Wikipedia-Beispiel), bei dem nullptr
es dem guten alten überlegen ist 0
?
nullptr_t
garantiert nur ein Mitglied nullptr
? Wenn also eine Funktion zurückgegeben wird nullptr_t
, weiß der Compiler bereits, welcher Wert zurückgegeben wird, unabhängig vom Funktionskörper?
std::nullptr_t
kann instanziiert werden, aber alle Instanzen sind identisch mit, nullptr
da der Typ definiert ist als typedef decltype(nullptr) nullptr_t
. Ich glaube, der Hauptgrund, warum der Typ existiert, ist, dass Funktionen bei Bedarf speziell zum Abfangen überladen nullptr
werden können. Siehe hier für ein Beispiel.
nullptr
Wird auch verwendet, um eine Nullreferenz für verwaltete Handles in C ++ / CLI darzustellen.