C++学习笔记6 - nullptr空指针、静态断言

本文介绍了C++11引入的 nullptr,它作为安全的空指针常量,解决了C++中NULL可能导致的类型转换问题。同时讲解了静态断言的概念,包括C中的assert与C++的static_assert,强调了static_assert在编译时进行类型检查的重要性。

一、C++11 引入的nullptr

C语言中的NULL

  1. NULL用来标记空指针
  2. NULL在C和C++中的定义不同,因为C++不允许(void*)隐式转为(int*)等指针类型
  3. C++中也可以继续用NULL,但是因为函数重载的引入,NULL传参会带来歧义。比如2个重载函数:void func(int* a); 和 void func(char* c);
  4. C语言中NULL就是 (void*)0; C++语言中NULL就是0

NULL和nullptr的区别

  1. NULL是个宏定义,而nullptr是个关键字
  2. NULL本质是一个数字0,而nullptr本质是一个指针类型
  3. nullptr就是一个可以绕过C++严格的类型检查的NULL,就是因为C++不允许int* p = (void*)0 这样,所以才有了nullptr

nullptr如何工作

  1. nullptr传参,表示真正的空指针
  2. nullptr的本质:
    const class nullptr_t{ public: template<class T> inline operator T*()const {return 0;} template<class C, class T> inline operator T C::*() const {return 0;} private: void operator&() const; } nullptr={};

nullptr的评价

  1. C++11 开始使用,
  2. 实践中在判断野指针时很多人还是喜欢使用 if(!p) ,历史遗留原因…
  3. nullptr无法解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值