Namespaces
Variants

std::nullptr_t

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (grundlegende Typen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Funktionen mit variabler Argumentanzahl
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch- und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in Header <cstddef>
using nullptr_t = decltype(nullptr);
(seit C++11)

std::nullptr_t ist der Typ des Nullzeiger-Literals nullptr. Es ist ein eigener Typ, der selbst weder ein Zeigertyp noch ein Zeiger-auf-Member-Typ ist. Prvalues dieses Typs sind Nullzeiger-Konstanten und können implizit konvertiert werden in jeden Zeiger- und Zeiger-auf-Member-Typ.

sizeof(std::nullptr_t) ist gleich sizeof(void *).

Hinweise

Der C++-Standard verlangt, dass <stddef.h> den Inhalt von <cstddef> im globalen Namensraum platziert, und verlangt dadurch, dass nullptr_t im globalen Namensraum verfügbar ist, wenn <stddef.h> eingebunden wird.

nullptr_t ist kein Teil von C bis C23.

Es ist nicht spezifiziert, ob die Deklaration von std::nullptr_t in anderen Standardbibliothek-Headern verfügbar ist. Eine Implementierung kann vermeiden, diesen Namen einzuführen, selbst wenn der Standard die Verwendung von std::nullptr_t erfordert, indem sie z.B. decltype ( nullptr ) verwendet.

Beispiel

Wenn zwei oder mehr Überladungen verschiedene Zeigertypen akzeptieren, ist eine Überladung für std::nullptr_t notwendig, um ein Nullzeiger-Argument zu akzeptieren.

#include <cstddef>
#include <iostream>
void f(int*)
{
    std::cout << "Pointer to integer overload\n";
}
void f(double*)
{
    std::cout << "Pointer to double overload\n";
}
void f(std::nullptr_t)
{
    std::cout << "null pointer overload\n";
}
int main()
{
    int* pi{};
    double* pd{};
    f(pi);
    f(pd);
    f(nullptr); // would be ambiguous without void f(nullptr_t)
    // f(0);    // ambiguous call: all three functions are candidates
    // f(NULL); // ambiguous if NULL is an integral null pointer constant 
                // (as is the case in most implementations)
}

Ausgabe:

Pointer to integer overload
Pointer to double overload
null pointer overload

Siehe auch

nullptr (C++11) der Zeigerliteral, der einen Nullzeigerwert angibt
implementierungsdefinierte Nullzeigerkonstante
(Makrokonstante)
(C++11) ( DR* )
prüft, ob ein Typ std::nullptr_t ist
(Klassentemplate)
C-Dokumentation für nullptr_t