0%

C++ nullptr与NULL

本文探讨了C++中NULLnullptr的区别。NULL是一个宏定义,通常被定义为0,在函数重载时可能导致歧义;而nullptr是一个特殊类型,专门用于表示空指针,能够明确调用指针类型的函数重载。通过代码示例,文章展示了nullptr在避免函数重载歧义中的优势,帮助读者理解其在现代C++编程中的重要性。

NULL 与 nullptr 的区别

NULL 为宏定义

1
#define NULL 0

NULL的类型不明显,而一下情况会出现函数重载不明确的情况

1
2
3
4
5
6
void f1(int i){}
void f1(int* p){}

int main(){
f1(NULL); ///< 调用函数不确定,编译器警告或报错
}

nullptr是一个特殊类型(nullptr_t)专门用来指代空指针。见下面代码

1
2
3
4
5
6
void f1(int i){}  ///< #1
void f1(int* p){} ///< #2

int main(){
f1(nullptr); ///< 明确调用#2函数
}