nullptr空指针

nullptr空指针
枫nullptr空指针
C++11 引入的
nullptr,本质上是为了替代老写法里的NULL和0。它解决的核心问题不是“能不能表示空指针”,而是“能不能明确、无歧义地表示空指针”。
1. 老问题出在哪里?
在旧代码里,空指针经常这样写:
1 | int* p = NULL; |
这在很多情况下能工作,但 NULL 本质上往往只是一个整数常量宏。
一旦遇到函数重载,问题就会暴露出来。
1 | void func(int) |
这显然不是我们想要的结果。
2. C++11 的 nullptr
nullptr 是一个专门用于表示空指针的关键字:
1 | int* p = nullptr; |
它的类型是 std::nullptr_t,不是普通整数,因此在重载解析里更安全。
3. 最典型的好处:函数重载更准确
1 |
|
输出:
1 | func(char*) |
这就是 nullptr 的价值所在。
4. 常见使用场景
4.1 初始化空指针
1 | int* p = nullptr; |
4.2 指针判空
1 | if (p == nullptr) { |
4.3 智能指针判空
1 | std::unique_ptr<int> ptr = nullptr; |
5. 和 NULL 的区别
NULL
- 多数实现里本质是
0或(void*)0 - 在重载场景下可能产生歧义
nullptr
- 专门表示空指针
- 类型明确
- 更适合现代 C++
6. 使用建议
如果项目已经是 C++11 及以上标准,那么新代码里基本就没有继续使用 NULL 的必要了。
统一改用 nullptr,会更清楚,也更安全。
总结
nullptr 虽然看起来只是一个很小的语法点,但它解决的是老 C++ 里一个很实际的问题:空指针和整数常量混在一起。
在现代 C++ 代码里,用 nullptr 替代 NULL,基本已经算是默认写法了。














