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 相同。若 左值转换 产生具有不同对象表示的 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