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. 类型不同(最关键)

  • NULLint 类型
  • 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 在模板中会被推导为 int
  • nullptr 会被正确识别为指针类型

总结(背这个)

  1. NULL 是 0(整数),nullptr 是空指针(专用类型)
  2. NULL 会造成重载歧义、类型错误
  3. nullptr 类型安全、无歧义、是现代 C++ 推荐用法

一句话:C++11 以后,永远用 nullptr,不用 NULL!

posted @ 2023-08-02 22:05  CodeMagicianT  阅读(136)  评论(0)    收藏  举报