命名空间
变体
操作

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)
(C++11)    
(C++17)
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> 的内容放置在全局命名空间中,从而要求 nullptr_t 在包含 <stddef.h> 时在全局命名空间中可用。

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) 指定空指针值的指针字面量[编辑]
实现定义的空指针常量
(宏常量) [编辑]
检查一个类型是否为 std::nullptr_t
(类模板) [编辑]
C 文档 for nullptr_t