std::nullptr_t
来自cppreference.com
在标头 <cstddef> 定义 | ||
using nullptr_t = decltype(nullptr); | (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<<"整数指针重载\n";} void f(double*){std::cout<<"double 指针重载\n";} void f(std::nullptr_t){std::cout<<"空指针重载\n";} int main(){int* pi{};double* pd{}; f(pi); f(pd); f(nullptr);// 无 void f(nullptr_t) 可能有歧义// f(0); // 歧义调用:三个函数全部为候选// f(NULL); // 如果 NULL 是整数空指针常量就会有歧义// (如在大部分实现中的情况)}
输出:
整数指针重载 double 指针重载 空指针重载
[编辑]参阅
nullptr(C++11) | 指定空指针值的指针字面量 |
实现定义的空指针常量 (宏常量) | |
(C++11)(DR*) | 检查类型是否为 std::nullptr_t (类模板) |
nullptr_t 的 C 文档 |