首页 > 后端开发 > C++ > 正文

c++中的空指针(nullptr)与NULL有何区别_c++现代化C++编码规范

裘德小鎮的故事
发布: 2025-12-03 14:20:48
原创
198人浏览过
C++11起推荐使用nullptr替代NULL。1. nullptr是专用空指针类型,避免与整型0混淆;2. 在函数重载、模板推导中类型更安全;3. 语义清晰,提升代码可读性;4. 兼容auto和现代C++特性;5. 符合现代编码规范。

c++中的空指针(nullptr)与null有何区别_c++现代化c++编码规范

在C++中,nullptrNULL 都用于表示空指针,但它们在类型安全、可读性和语义上有重要区别。随着现代C++(C++11及以后)的发展,推荐使用 nullptr 取代传统的 NULL

类型安全性不同

NULL 通常被定义为整数 0 或 (void*)0,在C++头文件中可能以宏的形式存在。由于它是整型常量,在函数重载等场景下容易引发歧义。

例如:

void func(int);
void func(char*);

func(NULL); // 调用的是 func(int),而不是预期的指针版本!

nullptr 是一个具有特殊类型 std::nullptr_t 的关键字,能隐式转换为任意指针类型,但不会匹配整型参数。因此上述代码使用 nullptr 时会正确调用指针版本:

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

func(nullptr); // 正确调用 func(char*)

语义更清晰

nullptr 明确表示“空指针”,而 NULL 在代码中可能被误解为整数零,尤其在模板或泛型编程中容易造成混淆。

Fotor AI Face Generator
Fotor AI Face Generator

Fotor 平台的在线 AI 头像生成器

Fotor AI Face Generator 50
查看详情 Fotor AI Face Generator

使用 nullptr 能让代码意图更明确,提升可读性与维护性。

兼容现代C++特性

nullptr 支持模板推导、auto 类型推断等现代C++特性:

auto ptr = nullptr; // ptr 的类型是 std::nullptr_t
int* p = nullptr; // 正确初始化为空指针

NULL 在 auto 推导中可能被识别为 int,导致错误:

#define NULL 0
auto p = NULL; // p 的类型是 int,不是指针!

编码规范建议

根据现代化C++编码规范(如 Google C++ Style Guide、C++ Core Guidelines),应:

  • 始终使用 nullptr 表示空指针值
  • 避免使用 NULL 或字面量 0 来初始化指针
  • 在新项目中统一采用 nullptr,提高类型安全和代码一致性

基本上就这些。从 C++11 开始,nullptr 就是空指针的首选表示方式,它解决了传统 NULL 的类型缺陷,是现代C++编码实践的重要组成部分。不复杂但容易忽略。

以上就是c++++中的空指针(nullptr)与NULL有何区别_c++现代化C++编码规范的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

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

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