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提高代码的健壮性