当前位置: 首页 > news >正文

【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
  • 避免在整型和指针类型之间重载。

原著在线阅读地址

http://www.jsqmd.com/news/287737/

相关文章:

  • Qwen-Image-2512为何难部署?环境依赖冲突解决方案实战
  • Qwen2.5-0.5B推理延迟高?极致优化部署案例分享
  • Qwen3-Embedding-4B调用无响应?网络配置排查教程
  • 一键启动YOLOE:目标检测与分割快速落地
  • Qwen3-4B-Instruct镜像免配置优势:告别环境冲突实战体验
  • java_ssm72酒店客房客房菜品餐饮点餐管理系统90340
  • CAM++实时录音功能:麦克风直连验证实战教程
  • 新手必看!用科哥镜像快速搭建Emotion2Vec+语音情感系统
  • java_ssm74音乐播放在线试听网站
  • 设计师福音!Qwen-Image-2512-ComfyUI让修图效率翻倍
  • YOLOv10训练时如何节省显存?AMP功能实测有效
  • java_ssm75餐厅网站订餐系统
  • java_ssm67社区居民便民服务关怀系统
  • 智能体软件工程落地:IQuest-Coder-V1 Agent构建教程
  • Glyph模型应用场景详解:不止于海报生成
  • AI团队部署规范:DeepSeek-R1生产环境最佳实践
  • java_ssm68社区志愿者服务
  • 开发者必看:通义千问3-14B集成LMStudio一键部署教程
  • java_ssm69考研族大学生校园租房网站
  • 复杂背景也不怕,科哥模型精准识别发丝边缘
  • PyTorch-2.x-Universal镜像如何切换CUDA版本?
  • java_ssm70计算机专业学生实习系统
  • MinerU农业科研数据:实验记录PDF自动化整理方案
  • 踩坑记录:使用PyTorch-2.x-Universal-Dev-v1.0的那些事
  • Qwen3-4B推理延迟高?GPU利用率优化实战案例
  • 零配置启动FSMN-VAD,网页端直接测试语音文件
  • Qwen3-4B显存碎片化?内存管理优化实战解决方案
  • java_ssm66电影评分推荐解说分析系统演gl4zm
  • 告别漫长等待!TurboDiffusion让视频生成提速200倍
  • FSMN-VAD支持哪些格式?MP3/WAV解析问题全解答