std::nullptr_t
来自 cppreference.cn
定义于头文件 <cstddef> |
||
using nullptr_t = decltype(nullptr); |
(since C++11) | |
std::nullptr_t
是空指针字面量 nullptr 的类型。它是一种独特的类型,本身不是指针类型或指向成员类型的指针。此类型的纯右值是空指针常量,并且可以隐式转换为任何指针和指向成员类型的指针。
sizeof(std::nullptr_t) 等于 sizeof(void *)。
[编辑] 注释
C++ 标准要求 <stddef.h> 将 <cstddef> 的内容放置在全局命名空间中,因此当包含 <stddef.h> 时,nullptr_t
在全局命名空间中可用。
nullptr_t
在 C23 之前不是 C 的一部分。
std::nullptr_t
的声明是否在任何其他标准库头文件中可用是未指定的。 即使标准要求使用 std::nullptr_t
,实现也可能避免引入此名称,例如,通过拼写 decltype(nullptr) 代替。
[编辑] 示例
如果两个或多个重载接受不同的指针类型,则需要为 std::nullptr_t
提供重载以接受空指针参数。
运行此代码
#include <cstddef> #include <iostream> void f(int*) { std::cout << "Pointer to integer overload\n"; } void f(double*) { std::cout << "Pointer to double overload\n"; } void f(std::nullptr_t) { std::cout << "null pointer overload\n"; } int main() { int* pi{}; double* pd{}; f(pi); f(pd); f(nullptr); // would be ambiguous without void f(nullptr_t) // f(0); // ambiguous call: all three functions are candidates // f(NULL); // ambiguous if NULL is an integral null pointer constant // (as is the case in most implementations) }
输出
Pointer to integer overload Pointer to double overload null pointer overload
[编辑] 参见
nullptr (C++11) | 指定空指针值的指针字面量 |
实现定义的空指针常量 (宏常量) | |
(C++11)(DR*) |
检查类型是否为 std::nullptr_t (类模板) |
C 文档 关于 nullptr_t
|