nullptr和NULL

nullptr是c++11中的關鍵字,表示空指針

//C語言中NULL定義
#define NULL (void*)0                //c語言中NULL爲void類型的指針,但允許將NULL定義爲0

//c++中NULL的定義
#ifndef NULL
#ifdef _cpluscplus                   //用於判定是c++類型還是c類型,詳情看上一篇blog
#define NULL 0                       //c++中將NULL定義爲整數0
#else
#define NULL ((void*)0)              //c語言中NULL爲void類型的指針
#endif
#endif

所以在c++中int *p=NULL; 實際表示將指針P的值賦爲0,而c++中當一個指針的值爲0時,認爲指針爲空指針

然後理解nullptr:

nullptr是一個字面值常量,類型爲std::nullptr_t,空指針常數可以轉換爲任意類型的指針類型。

在c++中(void *)不能轉化爲任意類型的指針,即 int *p=(void*)是錯誤的,但int *p=nullptr是正確的,原因

對於函數重載:若c++中 (void *)支持任意類型轉換,函數重載時將出現問題下列代碼中fun(NULL)將不能判斷調用哪個函數

void fun(int i){cout<<"1";};
void fun(char *p){cout<<"2";};
int main()
{
fun(NULL);       //輸出1,c++中NULL爲整數0
fun(nullptr);    //輸出2,nullptr 爲空指針常量。是指針類型
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章