nullptr(C++11)

C++11標準後,初始化一個空指針可以有以下方式:

int *p1 = 0;
int *p2 = NULL; //預處理變量
int *p3 = nullptr; //C++11新標準,以後儘量用這個代替NULL

爲什麼要新添加一個nullptr字面值常量呢?

考慮以下重載函數:

void fun(int *ptr)
{
    cout << "NULL" << endl;
}
void fun(int num)
{
    cout << "0" << endl;
}
//如果按照以下方式調用,輸出的結果會是什麼呢?
fun(NULL);
fun(nullptr);

運行結果:

 

這是因爲C++中NULL是一個預處理變量(在C語言中,NULL被定義爲void *),即爲字面值0,在程序的NULL處簡單的進行替換,所以函數調用實際是這樣的:

fun(0);

 顯然,輸出0的函數纔是最佳匹配,因此將調用輸出0的函數而不是輸出NULL的函數,而我們原意是調用輸出NULL的函數。

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