知识卡片

nullptr消除歧义

普通读书笔记卡 · 1401

内容

nullptr 具有专用类型 std::nullptr_t,可转换成空指针;0 和 NULL 则可能被推导成整数。使用 nullptr 可避免模板转发或指针/整数重载把空指针意图误解成数值;接口本身也应避免含混的重载集合。

参考来源

- 位置:《Effective Modern C++》第3章《移步现代C++》,条款八:优先考虑 nullptr 而非 0 和 NULL(源文件:_epub-src/EPUB/text/ch004.xhtml) - 结论依据:原文说明 nullptr 专用类型能按指针意图参与模板,而0和NULL会保留整数属性。 - 原始内容:nullptr 的真正类型是 std::nullptr_t,在一个完美的循环定义以后,std::nullptr_t 又被定义为 nullptr。std::nullptr_t 可以隐式转换为指向任何内置类型的指针。……当 NULL 被传递给 lockAndCall,形参 ptr 被推导为整型。……当 nullptr 传给 lockAndCall 时,ptr 被推导为 std::nullptr_t。