dedecms下载站,2022黄页全国各行业,网上做广告推广,国内网站设计一、nullptr的引入
在C98中#xff0c;通常是用NULL或者0对指针变量进行初始化
int* p1 NULL;
int* p2 0;
NULL其实一个宏#xff0c;本质是0#xff0c;在传统C头文件stddef.h中给可以看到如下代码
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define …一、nullptr的引入
在C98中通常是用NULL或者0对指针变量进行初始化
int* p1 NULL;
int* p2 0;
NULL其实一个宏本质是0在传统C头文件stddef.h中给可以看到如下代码
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif可以看到NULL本质上其实是字面常量0或者无类型指针(void*)的常量所以在使用NULL时会遇到一些麻烦
对于如下的两个重载函数func(NULL)本意是调用第二个函数结果却是调用了第一个函数
void func(int x)
{cout void func(int x) endl;
}void func(int* x)
{cout void func(int* x) endl;
}int main()
{func(0);func(NULL);return 0;
} 由此C11中引入了关键字nullptr可以使用nullptr来初始化指针变量不会再发生上述问题
二、nullptr的细节
1.使用nullptr表示指针空值时不需要包含头文件因为nullptr时C11作为新关键字引入的
2.在C11中sizeof(nullptr)与sizeof((void*)0)所占字节数相同
3.后续表示指针空值时用nullptr替代NULL提高代码的健壮性