nullptr_t
| Определено в заголовочном файле <stddef.h>
|
||
typedef typeof(nullptr) nullptr_t; |
(начиная с C23) | |
nullptr_t это тип предопределённой константы нулевого указателя nullptr. Это отдельный тип и сам по себе не является типом указателя. Он может быть неявно преобразован в любой тип указателя или в bool, и результат это нулевой указатель этого типа или false соответственно. Никакой тип, кроме самого nullptr_t, не может быть преобразован неявно или явно к nullptr_t.
sizeof(nullptr_t) и alignof(nullptr_t) равны sizeof(void*) и alignof(void*) соответственно.
nullptr_t имеет только одно допустимое значение, т. е. nullptr. Представление объекта типа nullptr точно такое же, как и у (void*)0. Если программа производит значение типа nullptr_t отличное от представления объекта, поведение не определено.
Пример
Демонстрирует, что nullptr_t это отдельный тип.
#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);
}
Вывод:
void*
other
nullptr_t
См. также
| константа нулевого указателя, определяемая реализацией (макроконстанта) | |
Документация C++ по nullptr_t
| |