std:: nullptr_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
|
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
|
|