考慮著這樣乙個函式過載的情形:
#include void foo(int) {} // #1
void foo(char*) {} // #2
int main()
從字面上來講,null是個空指標常量,我們可能會覺得:既然是個指標,那麼應該呼叫#2。但事實上呼叫的卻是#1,因為c++中null擴充套件為常數0,它是int型。
根本原因就是:常數0既是整數常量,也是空指標常量。
為了解決這種二義性,c++11標準引入了關鍵字nullptr,它作為一種空指標常量。例如:
void foo(int) {} // #1
void foo(char*) {} // #2
int main()
參考鏈結 C 指標空值nullptr
在良好的c c 程式設計習慣中,宣告乙個變數時應該給該變數乙個合適的初始值,否則可能會出現不可預料的錯誤,比如未初始化的指標。如果乙個指標沒有合法的指向,我們基本都是按照如下方式對其進行初始化 void testptr null實際是乙個巨集。null可能被定義為字面常量0,或者被定義為無型別指標 ...
C 11新特性之 nullptr
我們知道在程式設計的世界裡,0有雙重的角色,可以表示整數零,也可以表示乙個空指標。在c語言中,通過預編譯巨集null,可以區分0表示的是零還是 void 0.但是,在c 的世界中,這樣是不可以的。c 中允許函式過載。例如 void foo char void foo int 如果把null定義為0,...
C 中NULL和nullptr的區別
看起來null和nullptr都是代表空指標,但是null在過載函式的時候卻匹配到了引數為int的那個版本。這是因為在c 中,null的定義一般是這樣的 ifdef cplusplus define null 0 else define null void 0 endif cplusplus 可以看...