C++11 (一) - nullptr


一、C++98 中 0 和 NULL 的使用

C++98 中的0即表示整数字面值0,又表示指针的0值

int x = 0;   // 0 表示整数 0
int *p = 0;  // 0 表示普通指针 0

C++98 规定 NULL 就是一个整型0值 #define NULL 0,可以拿来当合法的整型使用(只是看起来比较尴尬)

int *q = NULL; // NULL表示指针 0,看起来没什么不合适
int y = NULL;  // NULL表示整形 0,虽然合法但看起来很尴尬

C++98 不区分整数0和指针0,在重载整型和指针的场合就会遇到麻烦了:

void func(int) {}
void func(int*) {}
func(0);     // 调用 func(int) 而不是 func(int*)
func(NULL);  // 也是调用 func(int)

我们调用 func(NULL); 的意图是调用 func(int*);,却无论如何也做不到,如果需要调用则必须将0显示转换成指针:func(static_cast<int*>(NULL));

二、C++11 中 nullptr 的使用

为了区分整数0和指针0,C++11引入了关键字 nullptr,它能够转换成任何指针,表示指针的0值,但是它不能转换成整形:

int x = 0; // 表示整数 0 
int *p = nullptr;  // nullptr 表示指针 0
int y = nullptr;   // 错误!不能将 nullptr 转换为整形

这样就将整数0和指针0区分开了,也可以解决整型和指针重载的问题

func(0);  // 调用 func(int)
func(nullptr);  // 调用 func(int*)

虽然 nullptr 的引入可以解决整型和指针重载函数的问题,但是C++11没有消除0可以表示空指针的性质,只是在 nullptr 的掩护下被隐藏了而已

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值