NULL 与 nullptr

结论: NULL 就是 0               为 int 类型

            nullptr 是 指针类型(可以随意转化成 int  *,double * 等等)(只能修饰指针!!!)

#include <iostream>
using namespace std;

void func(int *p)
{
    cout << "void func(int *p)" << endl;
}

void func(int p)
{
    cout << "void func(int p)" << endl;
}

int main()
{
    func(nullptr);    // 想要调用重载函数 void func(int p)
    return 0;
}

为什么我们通常 为了避免野指针 用 int* a =NULL 不出错

因为其中NULL的int类型 进行了隐式转换成了int* 类型 从而成功

#include <iostream>
using namespace std;

void func(int p)
{
    cout << "void func(int p)" << endl;
}

int main()
{
    func(nullptr);    // 想要调用重载函数 void func(int p)
    return 0;
}

而如果函数只有传参为int a 的函数时

传入nullptr会报错 因为 nullptr 为指针类型 并且可以隐式转换为任意指针类型 但是 指针类型无法转换为变量类型 则会报错

传NULL时 是会调用void func(int p) 函数的

但是编译器为了避免这种问题 设置了报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值