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語句;輸出如下;
C 11新特性之 nullptr
我們知道在程式設計的世界裡,0有雙重的角色,可以表示整數零,也可以表示乙個空指標。在c語言中,通過預編譯巨集null,可以區分0表示的是零還是 void 0.但是,在c 的世界中,這樣是不可以的。c 中允許函式過載。例如 void foo char void foo int 如果把null定義為0,...
C 11新特性學習
lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...
c 11 新特性學習(1)
1.原始字面量 在 c 11 中新增了定義原始字串的字面量,定義方式為 r 原始字串 其中 兩邊的字串可以省略。原始字面量 r 可以直接表示字串的實際含義,而不需要額外對字串做轉義或連線等操作。如 n t縮排這種 比如 程式設計過程中,使用的字串中常帶有一些特殊字元,對於這些字元往往要做專門的處理,...