nullptr_t
From cppreference.com
| Defined in header <stddef.h>
|
||
| typedef typeof(nullptr) nullptr_t; |
(since C23) | |
nullptr_t is the type of the predefined null pointer constant, nullptr. It is a distinct type that is not itself a pointer type. It can be implicitly converted to any pointer type or bool, and the result is the null pointer value of that type or false respectively. No type other than nullptr_t itself can be converted or explicitly cast to nullptr_t.
sizeof(nullptr_t) and alignof(nullptr_t) are equal to sizeof(void*) and alignof(void*) respectively.
nullptr_t has only one valid value, i.e., nullptr. The object representation of nullptr is same as that of (void*)0. If an lvalue conversion produces a nullptr_t value with a different object representation, the behavior is undefined.
Example
Demonstrate that nullptr_t is a distinct type.
Run this code
#include <stddef.h> #include <stdio.h> #define DETECT_NULL_POINTER_CONSTANT(e) \ _Generic(e, \ void* : puts("void*"), \ nullptr_t : puts("nullptr_t"), \ default : puts("other") \ ) int main() { DETECT_NULL_POINTER_CONSTANT(((void*)0)); DETECT_NULL_POINTER_CONSTANT(0); DETECT_NULL_POINTER_CONSTANT(nullptr); }
Output:
void* other nullptr_t
References
- C23 standard (ISO/IEC 9899:2024):
- 7.21.2 The nullptr_t type (p: 315-316)
See also
| implementation-defined null pointer constant (macro constant) | |
| C++ documentation for nullptr_t
| |