std::nullptr_t
| 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 |
| implementierungsdefinierte Nullzeigerkonstante (macro constant) | |
| (C++11)(DR*) |
prüft, ob ein Typ std::nullptr_t ist (Klassenvorlage) |
| C-Dokumentation für nullptr_t
| |