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 타입 (p: 315-316)

참고 항목

구현에서 정의된 널 포인터 상수
(매크로 상수)
C++ documentation for nullptr_t