天天看點

C++ 11 新特性 nullptr 學習

nullptr 出現的目的是為了替代 NULL。

在某種意義上來說,傳統 C++ 會把 NULL、0 視為同一種東西,這取決于編譯器如何定義 NULL,有些編譯器會将 NULL 定義為 ((void*)0),有些則會直接将其定義為 0。

C++ 不允許直接将 void * 隐式轉換到其他類型,但如果 NULL 被定義為 ((void*)0),那麼當編譯char *ch = NULL;時,NULL 隻好被定義為 0。

這将導緻C++ 中重載特性會發生混亂;

為了解決這個問題,C++11 引入了 nullptr 關鍵字,專門用來區分空指針、0。

nullptr 的類型為 nullptr_t,能夠隐式的轉換為任何指針或成員指針的類型,也能和他們進行相等或者不等的比較。

當需要使用 NULL 時候,養成直接使用 nullptr的習慣。

下面用VC6看一下;Win7;

建立一個單文檔工程;

在視類頭檔案添加兩個成員函數定義;

C++ 11 新特性 nullptr 學習

在視類CPP檔案實作如下;

C++ 11 新特性 nullptr 學習

在OnDraw函數進行調用;分别定義指針為NULL,nullptr;

C++ 11 新特性 nullptr 學習

編譯;不成功,如下;VC6不支援C++ 11;

C++ 11 新特性 nullptr 學習

注釋掉nullptr語句;輸出如下;

C++ 11 新特性 nullptr 學習

繼續閱讀