命名空间
变体
操作

nullptr_t

来自 cppreference.com
< 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 只有一个有效值,即 nullptrnullptr 的对象表示与 (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++ 文档 for nullptr_t