☰
NULL和nullptr的区别
2026/10/6 16:09:51 网站建设 项目流程

一 说明

NULL:C语言沿用过来的宏;

nullptr:C++11新增关键字,专门代表空指针。

// NULL本质,在C++里一般是这样定义 #define NULL 0 // 或者 #define NULL ((void*)0),但C++不允许直接把void*隐式转其他指针,所以大多直接定义成整数0

核心问题:NULL是整数0,不是指针!!!

void func(int a) { cout << "调用int版本" << endl; } void func(char* p) { cout << "调用指针版本" << endl; } int main() { func(NULL); // NULL等价0,优先匹配func(int) func(nullptr);// nullptr是空指针常量,匹配func(char*) return 0; }

func(NULL):传入整数 0,调用func(int),不符合预期,坑!

func(nullptr):传入空指针,调用指针重载版本,符合预期。

一 NULL

本质:宏,等价整数常量0

#define NULL 0

特点:

1.是整数0,不是真正的指针类型;

2.存在重载函数歧义问题(上面的例子);

3.C++98就支持,继承C语言;

4.可以隐式转换成任意指针,但是它本身是数字;

二 nullptr

本质:C++11关键字,空指针常量,类型是std::nullptr_t

特点:

1.类型是专门的空指针类型,不是整数;

2.可以隐式转为任意类型空指针,但不能转换为整型;

3.函数重载时,会精准匹配指针版本,不会匹配int;

4.推荐C++代码全部使用nullptr代替NULL

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询