Namensräume
Varianten
Aktionen

std::nullptr_t

Von cppreference.com
< cpp‎ | types
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-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 Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
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 weder selbst ein Zeigertyp noch ein Zeiger auf ein Member ist. Prvalues dieses Typs sind Nullzeigerkonstanten und können in jeden Zeiger- und Zeiger-auf-Member-Typ implizit konvertiert werden.

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

[bearbeiten] Anmerkungen

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

nullptr_t ist bis C23 kein Teil von C.

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

[bearbeiten] Beispiel

Wenn zwei oder mehr Überladungen verschiedene Zeigertypen akzeptieren, ist eine Überladung für std::nullptr_t notwendig, um ein Nullzeigerargument 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

[bearbeiten] Siehe auch

nullptr (C++11) das Zeiger-Literal, das einen Nullzeigerwert angibt[bearbeiten]
implementierungsdefinierte Nullzeigerkonstante
(macro constant) [bearbeiten]
(C++11)(DR*)
prüft, ob ein Typ std::nullptr_t ist
(Klassenvorlage) [bearbeiten]
C-Dokumentation für nullptr_t