Namespaces
Variants

Predefined null pointer constant (since C23)

From cppreference.net

目录

语法

nullptr (自 C23 起)

说明

关键字 nullptr 表示预定义的 null 指针常量。它是一个类型为 nullptr_t 非左值 nullptr 可被 转换 为指针类型或 bool 类型,转换结果分别为该类型的空指针值或 false

关键词

nullptr

示例

演示 nullptr 的副本同样可作为空指针常量使用。

#include <stddef.h>
#include <stdio.h>
void g(int*)
{
    puts("Function g called");
}
#define DETECT_NULL_POINTER_CONSTANT(e) \
    _Generic(e,                         \
        void* : puts("void*"),          \
        nullptr_t : puts("nullptr_t"),  \
        default : puts("integer")       \
    )
int main()
{
    g(nullptr); // OK
    g(NULL); // OK
    g(0); // OK
    auto cloned_nullptr = nullptr;
    g(cloned_nullptr); // OK
    [[maybe_unused]] auto cloned_NULL = NULL;
//  g(cloned_NULL); // 由实现定义:可能通过
    [[maybe_unused]] auto cloned_zero = 0;
//  g(cloned_zero); // 错误
    DETECT_NULL_POINTER_CONSTANT(((void*)0));
    DETECT_NULL_POINTER_CONSTANT(0);
    DETECT_NULL_POINTER_CONSTANT(nullptr);
    DETECT_NULL_POINTER_CONSTANT(NULL); // 由实现定义
}

可能的输出:

Function g called
Function g called
Function g called
Function g called
void*
integer
nullptr_t
void*

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 6.4.4.6 预定义常量 (p: 66)

另请参阅

实现定义的空指针常量
(宏常量)
预定义空指针常量 nullptr 的类型
(类型定义)