C++中nullptr用法及与NULL区别解析
在C++中,nullptr是用来表示空指针的字面量,它比传统的NULL更加安全和直观。简单来说,nullptr是现代C++推荐使用的空指针表示方式,而NULL则是C语言遗留下来的用法,在C++中也还能用,但有局限性。下面从几个实际使用场景出发,看看nullptr怎么用,以及它和NULL有哪些区别。nullptr的基本用法nullptr是一个关键字,可以直接用来赋值给指针变量,表示该指针不指向任何有效的对象或函数。int*p=nullptr;if(p==nullptr)

在C++中,nullptr 是用来表示空指针的字面量,它比传统的 NULL 更加安全和直观。简单来说,nullptr 是现代C++推荐使用的空指针表示方式,而 NULL 则是C语言遗留下来的用法,在C++中也还能用,但有局限性。
下面从几个实际使用场景出发,看看 nullptr 怎么用,以及它和 NULL 有哪些区别。
nullptr的基本用法
nullptr 是一个关键字,可以直接用来赋值给指针变量,表示该指针不指向任何有效的对象或函数。
int* p = nullptr;
if (p == nullptr) {
// 做一些处理
}它的类型是 std::nullptr_t,可以自动转换为任何指针类型,但不能转换为整数类型(除非显式转换),这避免了误用。
常见用途包括:
- 初始化指针变量
- 判断指针是否为空
- 作为函数参数传递空指针
NULL的问题在哪?
在C++中,NULL 通常被定义为整数字面量 0 或者 (void*)0。这就带来了一些问题。
比如下面这个例子:
void func(int); void func(char*); func(NULL); // 调用的是哪一个?
这时候编译器会优先调用 func(int),因为 NULL 被当作整数0来处理,而不是指针类型。这显然不是我们期望的行为。
而如果写成:
func(nullptr); // 正确调用 func(char*)
就不会出现歧义,因为 nullptr 只能匹配指针类型。
nullptr的优势总结
相比 NULL,nullptr 有几个明显优势:
- 类型更明确:
nullptr的类型是std::nullptr_t,不会被误认为整数。 - 避免重载歧义:在函数重载时,能正确匹配到指针版本的函数。
- 可读性和安全性更高:一看就知道是空指针,不容易出错。
- 兼容模板代码:在泛型编程中表现更好,减少类型推导错误。
特别是在大型项目或模板库中,使用 nullptr 能显著减少潜在的 bug。
实际建议
如果你在写现代C++代码(C++11及以上),建议一律使用 nullptr 替代 NULL。尤其是以下几种情况:
- 指针初始化
- 函数参数是空指针
- 函数返回值为空指针
- 条件判断中检查空指针
当然,如果你维护的是老代码,里面大量用了 NULL,那也没必要刻意去改。但新写的代码尽量用 nullptr,养成好习惯。
基本上就这些。用起来不复杂,但理解清楚之后,能让代码更清晰、更安全。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













