NULL、nullptr和0的區別
阿新 • • 發佈:2018-12-16
在進行C/C++編碼時,我們經常會用到空指標,這裡簡單介紹一下NULL、nullptr以及0的區別。
一、NULL和0
NULL其實就是整數0,標頭檔案中通過巨集定義將NULL定義為0。 因此,當呼叫如下程式碼時,編譯將會產生歧義
void fun(int v){
printf("int\n");
return ;
}
void fun(char *p){
printf("point\n");
return ;
}
int main(){
fun(NULL);
return 0;
}
使用GCC/G++ 5.4.0編譯時報錯如下
null.cc: In function ‘int main()’: null.cc:14:10: error: call of overloaded ‘fun(NULL)’ is ambiguous fun(NULL); ^ null.cc:3:6: note: candidate: void fun(int) void fun(int v){ ^ null.cc:8:6: note: candidate: void fun(char*) void fun(char *p){ ^
二、nullptr
為了避免上述歧義,C++11引入了nullptr,其型別為nullptr_t,不能隱式的轉換為整型,但是可以隱式轉換布林型別。執行下列程式碼將呼叫函式fun(char *p),避免產生歧義。
int main(){
fun(nullptr);
return 0;
}