2020-08-08 C和C++中NULL的区别

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;
}

你可能感兴趣的:(2020-08-08 C和C++中NULL的区别)