NULL , 0, nullptr

1.  NULL 在C中定义如下

#define NULL (void *)0

   而在c++中 NULL被定义为 0

#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else  /* __cplusplus */
#define NULL    ((void *)0)
#endif  /* __cplusplus */
#endif  /* NULL */

  这是由于,在C语言中,可以使用隐式转换,将(void*)转换为对应的指针类型,但是由于C++是不允许这样转换的,所以在C++的定义中 NULL 其实就只是代表0,所以C++11为了解决这个问题,提出nullptr的概念,它可以隐式的转换为任意指针类型。

2. C++中如果在空指针式直接使用0存在类型安全问题

    

//1.使用auto
//test函数的返回值类型此时是0 还是NULL呢?
auto res = test(a);
if(res == 0){
    //todo
}
//2. 重载指针和整数类型
//如果存在以下函数 主函数调用时无法调用到int test(int *)
int test(int);
int test(int *);

int main()
{
    test(0); //调用的是int test(int)
    test(null); //调用的是int test(int)
}

总结: 在c++中用nullptr代表空指针。

//待补充~~​​​​​​​

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值