C++11之前,我們使用 ptr = NULL對(duì)某個(gè)指針進(jìn)行初始化。
同時(shí)還使用ptr == NULL進(jìn)行指針是否為空的判斷。
在C語(yǔ)言中,空指針的值表示為
#define NULL (void *)0
但是C++對(duì)語(yǔ)法的類(lèi)型檢查更為嚴(yán)格,(void *)0就不好使了,比如:
int *p = (void *)0; // error, cannot assign void* to int*
所以在C++中的NULL為 #define NULL 0,但這又會(huì)導(dǎo)致函數(shù)重載時(shí)遇到困難:
void foo(char c, void *p);
void foo(char c, int i);
int main()
{
foo( 'x', NULL ); //?? Which foo
}
C++引入nullptr,作為一個(gè)新的關(guān)鍵字,解決了上述讓人頭疼的問(wèn)題。
讓我們?cè)倩仡櫼幌聨追N“0”的區(qū)別。
- 整數(shù)0 -- int number zero : 0
- 指向空類(lèi)型的指針 -- a pointer to an object of unknown type : void*
- 無(wú)指向的空指針 -- a pointer that does not point to an object : nullptr