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 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
|
|