bosthhe1 / cpushpush

0 stars 0 forks source link

C++中NULL和nullptr的区别 #53

Open bosthhe1 opened 1 year ago

bosthhe1 commented 1 year ago

在c++中NULL是作为宏定义的,nullptr是增加的关键字 image image 看颜色就知道nullptr为关键字,NULL为宏定义

bosthhe1 commented 1 year ago

为什么会增加nullptr关键字呐,是因为在c语言和c++中NULL都是一个宏,值为0,但是在下面传参的过程中发生了歧义,由于c++支持函数重载,所以在下面的函数中,将NULL和nullptr都传入,应该都是调用void* ptr这个传参函数,但是NULL是被定义为0,所以会去调用int i的函数,c++为了解决这个问题引入了nullptr关键字,这个关键字代表的是空指针,不能用来赋值非指针类型。

void func(void* ptr)
{
    cout << "void* ptr" << endl;
}
void func(int i)
{
    cout << "int i" << endl;
}
int main()
{
        func(nullptr);
    func(NULL);
    return 0;
}

image