std::nullptr_t

来自cppreference.com
< cpp‎ | types
 
 
工具库
语言支持
类型支持(基本类型、RTTI)
库功能特性测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)

 
类型支持
基本类型
定宽整数类型 (C++11)
定宽浮点类型 (C++23)
nullptr_t
(C++11)
数值极限
C 数值极限接口
运行时类型信息
 
在标头 <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) 指定空指针值的指针字面量
实现定义的空指针常量
(宏常量)
检查类型是否为 std::nullptr_t
(类模板)