news 2026/4/14 8:05:40

【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/4/10 9:42:22

新手必看!用科哥镜像快速搭建Emotion2Vec+语音情感系统

新手必看&#xff01;用科哥镜像快速搭建Emotion2Vec语音情感系统 1. 为什么你需要这个语音情感识别系统&#xff1f; 你有没有遇到过这些场景&#xff1a; 客服质检团队每天要听上百条通话录音&#xff0c;靠人工判断客户情绪是否满意&#xff0c;效率低、主观性强&#xf…

作者头像 李华
网站建设 2026/4/10 7:10:47

AI团队部署规范:DeepSeek-R1生产环境最佳实践

AI团队部署规范&#xff1a;DeepSeek-R1生产环境最佳实践 在AI工程落地过程中&#xff0c;模型部署不是“跑通就行”的一次性任务&#xff0c;而是需要兼顾稳定性、可维护性、资源效率与团队协作的一整套工程实践。尤其当团队开始将具备数学推理、代码生成和逻辑推演能力的轻量…

作者头像 李华
网站建设 2026/4/11 0:06:23

Qwen-Image-2512省钱部署方案:按需GPU计费成本省60%

Qwen-Image-2512省钱部署方案&#xff1a;按需GPU计费成本省60% 你是不是也遇到过这样的问题&#xff1a;想跑一个高质量图片生成模型&#xff0c;但一看到显卡租用价格就犹豫了&#xff1f;动辄每小时十几块的A100/H100费用&#xff0c;跑几个小时就上百&#xff1b;自己买卡…

作者头像 李华
网站建设 2026/4/8 21:07:42

Sambert语音合成可扩展性:多线程并发处理部署压力测试

Sambert语音合成可扩展性&#xff1a;多线程并发处理部署压力测试 1. 引言&#xff1a;为什么我们需要关注语音合成的并发能力&#xff1f; 你有没有遇到过这种情况&#xff1a;一个语音合成服务刚上线&#xff0c;用户不多时响应飞快&#xff0c;结果一到促销活动或者流量高…

作者头像 李华
网站建设 2026/4/8 9:45:09

学习笔记——时钟系统与定时器

时钟系统与定时器 一、基本概念定义 1. 核心术语解析 定时器 (Timer)&#xff1a;通过对已知频率的时钟信号进行计数&#xff0c;实现时间测量、延时控制或事件计数功能的硬件模块或软件机制。 时钟 (Clock)&#xff1a;在电子系统中产生稳定周期性振荡信号的电路或组件&…

作者头像 李华
网站建设 2026/4/11 3:32:28

无需编程!fft npainting lama让你轻松玩转AI图像修复

无需编程&#xff01;fft npainting lama让你轻松玩转AI图像修复 你是否遇到过这些情况&#xff1a;一张精心拍摄的照片上突然闯入路人&#xff0c;想删掉又不会PS&#xff1b;电商主图里有碍眼的水印&#xff0c;修图软件却要花半天时间&#xff1b;老照片上有划痕和污渍&…

作者头像 李华