nullptr是c++11中的關鍵字,表示空指針
要區分nullptr和NULL,首先要明白NULL的含義:
NULL是一個宏定義,在c和c++中的定義不同,c中NULL為(void*)0,而c++中NULL為整數0
//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 為空指針常量。是指針類型 }