C++11---nullptr:指针空值类型的常量


前言

C语言中的NULL,C++中的NULL,以及c11–nullptr


1.NULL在C和C++中

在C语言中,NULL是将0值强转成无类型指针((void*)0),是0值,类型是无类型指针
在C++中,NULL就是0值

1.1 下面代码是在C语言中

C语言中的NULL

int main()
{
	int a = 10;
	void* vp = &a;
	int* ip = vp;//在C中可以把无类型指针向其他类型指针赋值,发生隐式转换,进行强转
	char* cp = vp;;
}

1.2 下面代码是在C++中

C++中的NULL

int main()
{
	int a = 10;
	void* vp = &a;
	int* ip = vp;//error,C++中类型约束要比C强,必须手动进行强转,
	char* cp = vp;//error

	//如果按C中规则,NULL是无类型指针,在C++需要下面这种,
	int* p = (int*)NULL;//int* p=(int*)((void*)0)   
	//因此在C++中,NULL就是0值,向其他类型指针直接赋值
	int* p = NULL;
	char* p = NULL;
}

1.3 c11–nullptr

nullptr可以给一切指针类型进行赋值,都可以进行隐式转换
代码如下(示例):

void fun(int a)
{
	cout << "fun(int a)" << endl;
}
void fun(char* p)
{
	cout << "fun(char* p)" << endl;
}
int main()
{
	fun(0);
	fun(NULL);  //fun(0)   C++中原有NULL容易和整型值发生二义性,所以给出了指针空值类型
	fun(nullptr);//指针空值类型
	return 0;
}

int main()
{
	int* p = nullptr;
	//nullptr = 0;error
	//int a = nullptr;  //nullptr=指针空值类型  a=int   nullptr是指针空值类型的0值,不是整型的0值,类型不一样
}


总结

  1. nullptr是c11引入的关键字,是一个所谓“指针空值类型”的常量,在C++程序中使用
  2. 在C11中,sizeof(nullptr)与sizeof((void*)0)所占的字节相同(4或8)
  3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值