專業(yè)網(wǎng)站制作團隊電銷名單渠道在哪里找
一、nullptr的引入
在C++98中,通常是用NULL或者0對指針變量進行初始化
int* p1 = NULL;
int* p2 = 0;
NULL其實一個宏,本質(zhì)是0,在傳統(tǒng)C頭文件stddef.h中給可以看到如下代碼
#ifndef NULL
#ifdef __cplusplus
#define NULL ? 0
#else
#define NULL ? ((void *)0)
#endif
#endif
可以看到,NULL本質(zhì)上其實是字面常量0或者無類型指針(void*)的常量,所以在使用NULL時會遇到一些麻煩:
對于如下的兩個重載函數(shù),func(NULL)本意是調(diào)用第二個函數(shù),結果卻是調(diào)用了第一個函數(shù)
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;
}
由此C++11中引入了關鍵字nullptr,可以使用nullptr來初始化指針變量,不會再發(fā)生上述問題
二、nullptr的細節(jié)
1.使用nullptr表示指針空值時,不需要包含頭文件,因為nullptr時C++11作為新關鍵字引入的
2.在C++11中,sizeof(nullptr)與sizeof((void*)0)所占字節(jié)數(shù)相同
3.后續(xù)表示指針空值時,用nullptr替代NULL,提高代碼的健壯性