总结
豆包 AI 助手文章总结
首页 > 后端开发 > C++ > 正文

C++中的nullptr怎么用?和NULL有什么区别?

冰火之心
发布: 2025-06-06 16:54:02
原创
155人浏览过

c++中的nullptr怎么用?和null有什么区别?

在C++中,nullptr 是用来表示空指针的字面量,它比传统的 NULL 更加安全和直观。简单来说,nullptr 是现代C++推荐使用的空指针表示方式,而 NULL 则是C语言遗留下来的用法,在C++中也还能用,但有局限性。

下面从几个实际使用场景出发,看看 nullptr 怎么用,以及它和 NULL 有哪些区别


nullptr的基本用法

nullptr 是一个关键字,可以直接用来赋值给指针变量,表示该指针不指向任何有效的对象或函数。

int* p = nullptr;
if (p == nullptr) {
    // 做一些处理
}
登录后复制

它的类型是 std::nullptr_t,可以自动转换为任何指针类型,但不能转换为整数类型(除非显式转换),这避免了误用。

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

常见用途包括:

  • 初始化指针变量
  • 判断指针是否为空
  • 作为函数参数传递空指针

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,养成好习惯。


基本上就这些。用起来不复杂,但理解清楚之后,能让代码更清晰、更安全。

以上就是C++中的nullptr怎么用?和NULL有什么区别?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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