C++11之前皆刺,我們使用 ptr = NULL對某個指針進行初始化垂寥。
同時還使用ptr == NULL進行指針是否為空的判斷。
在C語言中赵哲,空指針的值表示為
#define NULL (void *)0
但是C++對語法的類型檢查更為嚴格,(void *)0就不好使了君丁,比如:
int *p = (void *)0; // error, cannot assign void* to int*
所以在C++中的NULL為 #define NULL 0枫夺,但這又會導(dǎo)致函數(shù)重載時遇到困難:
void foo(char c, void *p);
void foo(char c, int i);
int main()
{
foo( 'x', NULL ); //?? Which foo
}
C++引入nullptr,作為一個新的關(guān)鍵字绘闷,解決了上述讓人頭疼的問題橡庞。
讓我們再回顧一下幾種“0”的區(qū)別。
- 整數(shù)0 -- int number zero : 0
- 指向空類型的指針 -- a pointer to an object of unknown type : void*
- 無指向的空指針 -- a pointer that does not point to an object : nullptr