news 2026/5/16 20:57:17

【Effective Modern C++】第三章 转向现代C++:8. 优先选用nullptr,而非0或NULL

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Effective Modern C++】第三章 转向现代C++:8. 优先选用nullptr,而非0或NULL

当C++在只能使用指针的语境中发现了0会把勉强解释为空指针,但是C++的基本观点还是0和NULL的类型是int,而非指针

在C++98中,这样的观点可能在指针类型和整型之间进行重载时可能会发生意外:

void f(int); // 整型版本 void f(bool); // 布尔版本 void f(void*); // 指针版本 f(0); // 调用 f(int),而不是 f(void*)! f(NULL); // 可能通不过编译,但一般会调用 f(int)。从来不会调用 f(void*) f(nullptr); // 正确调用 f(void*)

nullptr的优点

它不具备整型类型。实际类型是std::nullptr_t,并且可以隐式转换到所有的裸指针类型。

提升代码的可读性:

// 使用 0/NULL 的歧义 auto result = findRecord(); if (result == 0) { // result 是指针还是整数?不明确 // ... } // 使用 nullptr 的明确性 auto result = findRecord(); if (result == nullptr) { // 明确是指针比较 // ... }

在使用模板时具有显著优势(模板类型推导会严格将 0/NULL 解析为整型,而非空指针语义):

int f1(std::shared_ptr<Widget> spw); double f2(std::unique_ptr<Widget> upw); bool f3(Widget* pw); // 模板函数 template<typename FuncType, typename PtrType> decltype(auto) lockAndCall(FuncType func, PtrType ptr) { // ... 加锁等操作 return func(ptr); } // 调用结果 auto r1 = lockAndCall(f1, 0); // 编译错误:0被推导为int,无法转为shared_ptr auto r2 = lockAndCall(f2, NULL); // 编译错误:NULL被推导为整型,无法转为unique_ptr auto r3 = lockAndCall(f3, nullptr);// 正确:nullptr_t可隐式转为Widget*

总结

  • 相对于0或NULL,优先选用nullptr
  • 避免在整型和指针类型之间重载。

原著在线阅读地址

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 7:27:28

Qwen-Image-2512为何难部署?环境依赖冲突解决方案实战

Qwen-Image-2512为何难部署&#xff1f;环境依赖冲突解决方案实战 1. 问题缘起&#xff1a;看似简单的“一键启动”背后藏着什么&#xff1f; 你是不是也遇到过这样的情况——看到社区里有人分享“Qwen-Image-2512-ComfyUI镜像&#xff0c;4090D单卡秒启”&#xff0c;兴冲冲…

作者头像 李华
网站建设 2026/5/15 23:49:51

java_ssm71连锁洗衣店干洗店业务管理系统

目录 具体实现截图连锁洗衣店干洗店业务管理系统摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 连锁洗衣店干洗店业务管理系统摘要 连锁洗衣店干洗店业务管理系统基于Java SSM框架&#…

作者头像 李华
网站建设 2026/5/10 12:20:16

MinerU农业科研数据:实验记录PDF自动化整理方案

MinerU农业科研数据&#xff1a;实验记录PDF自动化整理方案 在农业科研工作中&#xff0c;实验记录往往以PDF形式分散保存——田间观测数据、温室环境日志、作物生长图像标注、土壤检测报告……这些文档格式不一、排版复杂&#xff0c;有的含多栏布局&#xff0c;有的嵌套表格…

作者头像 李华
网站建设 2026/5/11 2:30:53

通义千问3-14B法律场景案例:合同审查系统部署实操

通义千问3-14B法律场景案例&#xff1a;合同审查系统部署实操 1. 为什么法律人需要一个“能读完整份合同”的AI&#xff1f; 你有没有遇到过这样的情况&#xff1a;一份200页的采购框架协议&#xff0c;密密麻麻全是条款&#xff0c;关键责任条款藏在第87页附录三的第4小节&a…

作者头像 李华
网站建设 2026/5/10 8:55:29

泄密者的致命疏忽:打印机监控存档涉密截图

现代工作场所打印机配备的监控软件具有惊人能力&#xff0c;不仅记录每次打印的元数据&#xff0c;还能存档实际打印内容&#xff0c;从而成为强大告密者/泄密者。这一能力直接导致了一起涉及机密信息泄露的FBI调查&#xff0c;主角是一名政府承包商员工和一名华盛顿邮报记者。…

作者头像 李华
网站建设 2026/5/14 13:05:06

声纹识别冷启动问题:CAM++小样本适应策略

声纹识别冷启动问题&#xff1a;CAM小样本适应策略 1. 引言&#xff1a;当声纹识别遇上“冷启动”难题 你有没有遇到过这种情况&#xff1f;刚部署好一套声纹识别系统&#xff0c;信心满满地准备验证说话人身份&#xff0c;结果发现——数据库里只有一两条该用户的语音样本。…

作者头像 李华