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;
建立一個單文檔工程;
在視類頭檔案添加兩個成員函數定義;
在視類CPP檔案實作如下;
在OnDraw函數進行調用;分别定義指針為NULL,nullptr;
編譯;不成功,如下;VC6不支援C++ 11;
注釋掉nullptr語句;輸出如下;