C 為啥引入nullptr

2022-09-06 17:45:12 字數 437 閱讀 7442

考慮著這樣乙個函式過載的情形:

#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 可以看...