预定义空指针常量 (C23 起)
来自cppreference.com
语法
nullptr
|
(C23 起) | ||||||||
解释
关键词 nullptr 代表预定义的空指针常量。它是 nullptr_t 类型的非左值。nullptr 能转换到指针类型或 bool,结果分别为该类型的空指针值或 false。
关键词
示例
演示 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); // 由实现定义:可能 OK
[[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 Predefined constants (第 66 页)
参阅
| 实现定义的空指针常量 (宏常量) | |
(C23) |
预定义空指针常量 nullptr 的类型 (typedef) |
nullptr 的 C++ 文档
| |