0

0

C++中的std::nullptr_t类型是什么?(nullptr关键字的字面量类型)

尼克

尼克

发布时间:2026-01-14 11:35:36

|

370人浏览过

|

来源于php中文网

原创

std::nullptr_t 是 C++11 引入的独立空指针字面量类型,唯一值为 nullptr,可隐式转换为任意指针类型但不可转为算术类型,专用于消除重载和模板推导中的二义性。

c++中的std::nullptr_t类型是什么?(nullptr关键字的字面量类型)

std::nullptr_t 是什么类型?

std::nullptr_t 是 C++11 引入的一个空指针字面量的类型,它唯一合法的值就是 nullptr。它不是整数类型,也不是指针类型,而是一个独立的、可隐式转换为任意指针类型(包括成员指针)的 空类型

它的设计目标很明确:让 nullptr 在函数重载和模板推导中能被准确识别,避免 NULL(通常定义为 00L)带来的二义性问题。

为什么不能用 void* 或 int 来表示 nullptr?

如果 nullptr 的类型是 void*,它就无法隐式转换到成员函数指针(void (T::*)());如果它是 int,又会和整型重载冲突。而 std::nullptr_t 正好填补了这个空白:

  • 可隐式转换为任意对象指针、函数指针、成员指针
  • 不可转换为算术类型(比如不能赋给 int
  • 不可用于算术运算(nullptr + 1 编译报错)
  • 大小通常是 1 字节(但标准未规定,仅保证可空)

在函数重载中怎么体现它的作用?

这是 std::nullptr_t 最典型的使用场景。看下面这个例子:

立即学习C++免费学习笔记(深入)”;

Python开发网站指南 WORD版
Python开发网站指南 WORD版

本文档主要讲述的是Python开发网站指南;HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器 Python和其他程序语言一样,有自身的一套流程控制语句,而且这些语句的语法和其它程序语言类似,都有for, if ,while 类的关键字来表达程序流程。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载
void foo(int) { std::cout << "int\n"; }
void foo(char*) { std::cout << "char*\n"; }
void foo(std::nullptr_t) { std::cout << "nullptr_t\n"; }

foo(0); // 调用 int 版本 foo(nullptr); // 调用 nullptr_t 版本(不会歧义成 char) foo(NULL); // 可能调用 int 或 char,取决于 NULL 定义

没有 std::nullptr_t 重载时,foo(nullptr) 会退化为匹配 char*(因为 nullptr 可转为 char*),但有了专属重载后,编译器优先选择最精确匹配——即 std::nullptr_t 版本。

模板推导和类型检查中要注意什么?

模板参数推导时,nullptr 的类型始终是 std::nullptr_t,这点必须明确:

  • auto x = nullptr;x 类型是 std::nullptr_t
  • template void bar(T); bar(nullptr);T 推导为 std::nullptr_t
  • static_assert(std::is_same_v); → 成立
  • std::is_pointer_v<:nullptr_t>false,别误以为它是指针类型

容易忽略的一点:std::nullptr_t 是一个 cv-unqualified 类型,所以 const std::nullptr_tstd::nullptr_t 是不同类型,虽然它们都能接收 nullptr 值。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

435

2024.03.01

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

521

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

537

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

194

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2023.11.23

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

1

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.5万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号