Namespaces
Variants

nullptr_t

From cppreference.net
< c ‎ | types
Определено в заголовочном файле <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 . Если lvalue-преобразование производит значение типа 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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.21.2 Тип nullptr_t (стр: 315-316)

Смотрите также

определяемая реализацией константа нулевого указателя
(макрос-константа)
C++ documentation для nullptr_t