C++ 11 新特性 nullptr 學習

bcbobo21cn發表於2020-12-17

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語句;輸出如下;

 

相關文章