指针空值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
2
3
4int main() {
func(nullptr); // 正确调用func(char*),因为nullptr是指针类型
return 0;
}安全性:
nullptr不能赋值给非指针变量(如int),而NULL(作为0)可以,因此nullptr更安全:1
2int x = nullptr; // 错误:nullptr不能转换为int
int* p = nullptr; // 正确:nullptr可转换为指针类型
nullptr主要用于初始化或赋值指针,表示 “指针未指向任何有效对象”:
初始化指针:
1
2int* p = nullptr; // 初始化空指针
char* str = nullptr;指针判空:
1
2
3if (p == nullptr) { // 判断指针是否为空
std::cout << "p是空指针" << std::endl;
}函数返回空指针:
1
2
3
4int* find() {
// 未找到目标时返回空指针
return nullptr;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 山川不念旧!
评论



