Namespaces
Variants

std:: nullptr_t

From cppreference.net
Utilities library
Definiert im Header <cstddef>
using nullptr_t = decltype ( nullptr ) ;
(seit C++11)

std::nullptr_t ist der Typ des Nullzeigerliterals nullptr . Es handelt sich um einen eigenständigen Typ, der selbst kein Zeigertyp und kein Zeiger-auf-Mitglied-Typ ist. Prvalues dieses Typs sind Nullzeigerkonstanten und können implizit konvertiert werden in beliebige Zeiger- und Zeiger-auf-Mitglied-Typen.

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