指针空值nullptr
在 C++ 中,nullptr是 C++11 标准引入的关键字,专门用于表示空指针,其设计目的是解决传统NULL在表示空指针时的歧义问题。
C++11 之前,通常用NULL表示空指针,但NULL本质是一个宏(定义为0或(void*)0),这会导致一些歧义:
若NULL被定义为0(多数编译器如此),当函数重载时,NULL会被当作整数0处理,而非指针类型,可能匹配错误的重载函数。
1 | void Nullptrfunc(int a) |
显而易见的,当我们试图使用NULL作为空指针来使用时,编译器会将其当作0来使用
这是因为在 C++中对NULL进行了简单的替换
1 |
不同于
NULL,nullptr作为指针类型不可以对非指针类型进行赋值
nullptr是 C++11 新增的关键字,专门用于表示空指针,具有以下特性:
类型明确:
nullptr的类型是nullptr_t(一种特殊的空指针类型),它可以隐式转换为任何指针类型(包括类指针、函数指针等),但不能转换为整数类型(避免歧义)。解决重载歧义:对于上面的重载函数,用
nullptr调用时会正确匹配指针版本:
1 | int main() { |
- 安全性:
nullptr不能赋值给非指针变量(如int),而NULL(作为0)可以,因此nullptr更安全:
1 | int x = nullptr; // 错误:nullptr不能转换为int |
nullptr主要用于初始化或赋值指针,表示 “指针未指向任何有效对象”:
- 初始化指针:
1 | int* p = nullptr; // 初始化空指针 |
- 指针判空:
1 | if (p == nullptr) { // 判断指针是否为空 |
- 函数返回空指针:
1 | int* find() { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 山川不念旧!
评论





