Heim > Backend-Entwicklung > C++ > Warum ist „nullptr' eine bessere Wahl als „NULL' und „0' für Zeiger in C?

Warum ist „nullptr' eine bessere Wahl als „NULL' und „0' für Zeiger in C?

Linda Hamilton
Freigeben: 2024-11-08 12:55:02
Original
286 Leute haben es durchsucht

Why is `nullptr` a Better Choice than `NULL` and `0` for Pointers in C  ?

Verwendung von nullptr: Vorteile gegenüber NULL und 0

Zeiger müssen ordnungsgemäß initialisiert werden, um unerwartetes Verhalten zu vermeiden. Während die Syntax int* p1 = nullptr;, int* p2 = NULL; und int* p3 = 0; mag funktional gleichwertig erscheinen, die Verwendung von nullptr bietet gegenüber den anderen beiden Optionen erhebliche Vorteile.

Überladende Mehrdeutigkeitsauflösung:

Bedenken Sie die überladenen Funktionen:

void f(char const *ptr);
void f(int v);

f(NULL);  // ambiguous function call
Nach dem Login kopieren

Mit NULL kann der Compiler nicht bestimmen, welche Funktion aufgerufen werden soll, da es sich entweder um f(char const *) oder f(int) handeln könnte. Diese Mehrdeutigkeit kann zu unerwarteten Fehlern führen. Die Verwendung von nullptr löst diese Mehrdeutigkeit jedoch auf:

f(nullptr); // calls f(char const *)
Nach dem Login kopieren

Vorlagenspezialisierung:

In C ist der Typ von nullptr nullptr_t. Dies ermöglicht eine Vorlagenspezialisierung für nullptr und bietet beispiellose Flexibilität:

template<typename T, T *ptr>
struct something{};                     // primary template

template<>
struct something<nullptr_t, nullptr>{};  // partial specialization for nullptr
Nach dem Login kopieren

Mit dieser Spezialisierung können Sie nullptr-Argumente eindeutig verarbeiten:

template<typename T>
void f(T *ptr);   // function to handle non-nullptr argument

void f(nullptr_t); // overload to handle nullptr argument
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum ist „nullptr' eine bessere Wahl als „NULL' und „0' für Zeiger in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage