Namespaces
Variants

nullptr_t

From cppreference.net
< c ‎ | types
ヘッダーで定義 <stddef.h>
typedef typeof ( nullptr ) nullptr_t ;
(C23以降)

nullptr_t は事前定義された null ポインタ定数 nullptr の型です。これはポインタ型自体ではない独立した型です。これは任意のポインタ型または bool 暗黙変換 可能であり、結果はそれぞれその型の null ポインタ値または 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

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.21.2 nullptr_t型 (p: 315-316)

関連項目

実装定義のヌルポインタ定数
(マクロ定数)
C++ documentation for nullptr_t