3.C++中NULL和nullptr区别
3.C++中NULL和nullptr区别
NULL 是宏,本质是整数 0;nullptr 是 C++11 专用空指针,有独立类型,不会引起歧义。
1. 本质不同
-
NULL:是宏,C++ 里定义为
0(整数)#define NULL 0 -
nullptr:是关键字,类型是
std::nullptr_t,专门表示空指针
2. 类型不同(最关键)
NULL是 int 类型nullptr是 指针类型
void fun(int) { cout << "int"; }
void fun(int*) { cout << "int*"; }
fun(NULL); // 调用 fun(int),因为 NULL 是 0(整数)
fun(nullptr); // 调用 fun(int*),正确匹配指针
这就是最大坑:NULL 会被当成整数,导致函数重载错误。
3. 安全性不同
-
NULL 不安全:可以赋值给整数(不报错),容易引发隐蔽 bug
int a = NULL; // 合法,但逻辑错误 -
nullptr 安全:只能用于指针,不能赋值给普通变量
int a = nullptr; // 编译报错!避免错误
4. 模板与泛型
NULL在模板中会被推导为intnullptr会被正确识别为指针类型
总结(背这个)
- NULL 是 0(整数),nullptr 是空指针(专用类型)
- NULL 会造成重载歧义、类型错误
- nullptr 类型安全、无歧义、是现代 C++ 推荐用法
一句话:C++11 以后,永远用 nullptr,不用 NULL!

浙公网安备 33010602011771号