NULL本质是整数0,重载时优先匹配int参数而非指针;nullptr是std::nullptr_t类型,只向指针隐式转换,确保类型安全。
因为 NULL 本质是宏,C++ 中多数编译器定义为 0(int 类型),不是指针。当存在两个重载函数时,编译器优先匹配整数参数——哪怕你本意是传空指针。
void func(int) 和 void func(char*) 同时存在时:func(NULL) 会调用 func(int),而不是你预期的指针版本func(nullptr) 则**一定**匹配 func(char*),因为 nullptr 的类型是 std::nullptr_t,只向指针类型隐式转换
),NULL 定义可能更混乱是的。NULL 是整数,进模板后常被推成 int;而 nullptr 进模板永远是 std::nullptr_t,再由上下文决定转成什么指针——这才是你想要的语义。
auto x = NULL; → x 类型是 int(危险!后续误当指针用就崩)auto y = nullptr; → y 类型是 std::nullptr_t,且能安全用于 int*、std::string* 等任何指针上下文std::unique_ptr p = NULL; 编译通过但语义错误;std::unique_ptr p = nullptr; 才是标准写法可以,但别用 IDE “全文件替换”一刀切——尤其注意 C 头文件和跨语言接口代码。
= NULL、(NULL)、== NULL,替换成 = nullptr 等,基本安全extern "C" 接口时,NULL 可能被 C 编译器要求(比如系统 API 参数),此时保留 NULL 更稳妥NULL(如 #define SAFE_DELETE(p) do { delete p; p = NULL; } while(0)),建议改写为 p = nullptr,但需确认所有使用该宏的指针类型兼容error: cannot convert 'int' to 'xxx*' in assignment,说明某处 NULL 原本被当整数用了(比如数组索引),不能硬换
nullptr?是的。nullptr 是 C++11 标准关键字,C++98/03 编译器(如旧版 VC6、GCC 4.1 以下)根本不认识它,会报 error: 'nullptr' was not declared in this scope。
const class nullptr_t {
public:
template operator T*() const { return 0; }
template operator T C::*() const { return 0; }
private: void operator&() const;
} nullptr = {}; decltype(nullptr)、与标准库智能指针交互可能出问题#if __cplusplus >= 201103L 分支处理nullptr 不是“可选项”,而是类型安全的底线——它不解决新功能,但堵住了 NULL 留下的所有歧义入口。最易忽略的点是:**连 if (ptr == NULL) 这种看似无害的判断,都可能因宏展开或重载干扰,在复杂模板中引发静默类型退化**。
# 工具
# c++
# 区别
# 标准库
# 隐式转换
# 为什么
# red
# String
# NULL
# define
# if
# while
# Error
# auto
# extern
# char
# int
# void
# 指针
# 重载函数
# 接口
# 指针类型
# 函数重载
# 空指针
# delete
# this
# ide
# 会报
# 替换成
# 头文件
# 隐式
# 才是
# 就不
# 要注意
# 用了
# 不认识
# 不支持
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
mac怎么分屏_MAC双屏显示与分屏操作技巧【指南】
Windows10系统怎么查看防火墙状态_Win10安全中心网络保护
Linux如何使用Curl发送请求_Linux下API接口测试与文件下载技巧【步骤】
Win11怎么设置触控板手势_Windows11三指四指操作自定义
Win11怎么用设置清理回收站_Win11设置清理回收站技巧【步骤】
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
Win11怎么关闭系统透明度_Windows11个性化颜色透明效果
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Win11如何设置鼠标灵敏度_Win11鼠标灵敏度调整教程【攻略】
Win11怎么关闭搜索历史 Win11清除搜索框最近记录【隐私】
Python文件操作优化_大文件与流处理解析【教程】
如何在Golang中编写异步函数测试_Golang异步操作测试策略
Windows11怎么自定义任务栏_Windows11任务栏自定义教程【步骤】
c# Task.ConfigureAwait(true) 在什么场景下是必须的
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
Python与GPU加速技术_CUDA与Numba高性能计算实践
Python包结构设计_大型项目组织解析【指导】
Win11怎么更改电脑名称_Windows 11修改计算机名操作指南【步骤】
Win11怎么查看wifi信号强度_检测Windows 11无线网络质量方法【详解】
如何在Golang中优化文件读写性能_使用缓冲和并发处理
c++怎么使用std::unique实现去重_c++ 容器元素排序与连续重复删除【教程】
Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】
php做exe支持多线程吗_并发处理实现方式【详解】
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Win10怎么创建桌面快捷方式 Win10为应用创建快捷方式【步骤】
Windows10任务栏图标变成白色文件_Win10重建图标缓存修复方法
Win11怎么查看显卡显存_查询Win11显卡详细参数方法【步骤】
php增删改查需要哪些扩展_开启mysqli或pdo扩展方法【说明】
Win11怎么更改鼠标指针_Windows 11自定义鼠标样式与大小【美化】
Python函数缓存机制_lru_cache解析【指导】
c++中如何使用auto关键字_c++11类型推导用法说明
Windows10电脑怎么设置电源按钮_Win10按电源键关机或休眠
c++ namespace命名空间用法_c++避免命名冲突
Win11怎样彻底卸载自带应用_Win11彻底卸载自带应用方法【步骤】
Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】
Python生成器表达式内存优化_惰性计算说明【指导】
如何使用Golang开发基础文件下载功能_Golang HTTP文件响应与缓存实现
Win11怎么设置默认视频播放器_Windows 11关联媒体文件打开方式【步骤】
Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】
如何在 Pandas 中按元素交集合并两列字符串
如何使用Golang实现微服务事件驱动_使用消息总线解耦服务
Win11怎样安装网易云音乐_Win11安装网易云教程【步骤】
如何使用Golang实现云原生应用弹性伸缩_自动应对流量变化
如何使用Golang实现容器健康检查_监控和自动重启
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
Python网页解析流程_html结构说明【指导】
如何在JavaScript中动态拼接PHP的base_url与前端变量
Win10如何更改开机密码_Windows10登录选项更改密码
Win11怎么关闭自动维护 Win11禁用系统自动维护功能【优化】
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。