2020-09-24 NULL nullptr
2020-09-25 本文已影响0人
yuerxiaoshui
#include <iostream>
using namespace std;
void func(void* t)
{
cout << "func1" << endl;
}
void func(int i)
{
cout << "func2" << endl;
}
int main()
{
func(NULL);
func(nullptr);
return 0;
}
输出结果为:
func2
func1
其中,NULL 参数的函数匹配到了 int 型参数的函数,原因是在 C++ 中,NULL 的定义如下:
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void*)0)
#endif // __cplusplus
故 NULL 在 C++ 中就代表 0,这是因为在 C++ 中 void* 类型是不允许隐式转换成其他类型的,所以用 0 来代表空指针,但在重载整形的情况下,会出现上述问题。
所以,C++ 加入了 nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况。
故,建议以后使用 nullptr,不用 NULL。