stddef.h或者vcruntime.h里面是这么定义的
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
在C中NULL可以被定义为0或者0L(32位和64位的区别),或者直接就是由0或者0L转成的成void*。
在C++中,一个指向空的指针要么是整形0,要么是std::nullptr_t。
歧义总是出现在函数重载的时候,比如下面的两个重载函数,如果传NULL就相当于传0,会调用第一个print,所以高版本c++引入了nullptr的概念,建议有nullptr的不用在用NULL了。
void Print(int a)
{
cout << "int" << endl;
cout << a << endl;
}
void Print(char* a)
{
if (nullptr == NULL)
{
cout << "true" << endl;
}
cout << "char" << endl;
cout << &a << endl;
}
网友评论