nullptr、using

nullptr、using

NULL

  1. NULL是一个宏定义,在C语言中NULL被定义为(void *)0,而在C++中NULL被定义为0
    在这里插入图片描述
  2. 空指针和野指针
    (1)空指针是指不指向任何内存空间的指针;以前C++中使用0来表示空指针,由于NULL是0的宏定义,因此,空指针用NULL表示
    (2)野指针是指指向无效内存空间的指针,声明一个指针后,该指针指向的是无效内存空间,因此,一般需要将其声明为空指针int * ptr = NULL
  3. 由于空指针可以用0表示,因此0既可以表示整型常量又可以表示指针常量,所以NULL也同样既可以表示指针常量又可以表示整型常量
int x = NULL;    //正确
int * ptr = NULL;    //正确
  1. 在C++中是允许函数重载的,而NULL为0的宏定义,因此在传入NULL参数时,会将NULL看做整型常量0
void show(int x)
{
    cout << "int" << endl;
}
void show(char* ptr)
{
    cout << "char *" << endl;
}
int main()
{       
    show(NULL);   //输出int
    return 0;
}

nullptr

  1. nullptr是C++11引入的关键字,不是宏定义,用于表示空指针,它是指针类型,不能转换为整数类型(强转另当别论),因此调用show(nullptr)将输出char *
  2. nullptr的引入避免了整型常量0和指针常量0的混淆
  3. 后续在将指针初始化为空指针时,最好使用nullptr,当然,这并不代表int * ptr = 0;int * ptr = NULL不能被使用,为了向后兼容,C++仍然支持使用0或者NULL来表示空指针,因此nullptr == 0true,但是能用nullptr还是尽量用nullptr吧

using

  1. using关键字C++11提供了另一种创建别名的方法,其功能相当于typedef,但比typedef更强大
typedef  int*  INT;
INT_PTR ptr1, ptr2;
using INT_PTR = int *;
INT_PTR ptr1, ptr2;  //ptr1和ptr2的类型均为int *,这一点与typedef是类似的
  1. using可用于模板部分具体化而typedef不行
    在这里插入图片描述
template<typename T> 
  using arr12 = std::array<T, 12>; //将模板array<T, int>的int参数设置为12
//此时:
std::array<double, 12>  a1;
arr12<double> a1;  //该式与上式等价
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值