NULL
摘自Bjarne Stroustrup’s C++ Style and Technique FAQ:
In C++, the definition of NULL is 0.
即在C++中,NULL與0是沒有區別的。
這會造成什麼問題呢?設想以下例子,改自NULL vs nullptr (Why was it replaced?) [duplicate] - Joe Z’s answer:
void f(int x){
std::cout << "int: " << x << std::endl;
}
void f(void* x){
std::cout << "pointer: " << x << std::endl;
}
我們定義兩個同名的函數f
,一個的參數是int
,另一個的參數則是:f(foo *)
。
如果我們使用:
f(NULL);
將會出現編譯錯誤:
error: call to 'f' is ambiguous
這是因為NULL
在C++中指的可能是數字0,也可能代表空的指標,這造成了編譯器的混淆。
nullptr
因此在C++中比較建議採用nullptr
來替代NULL
。
使用以下兩種方式來調用上面定義的函數f
:
f(0); //int: 0
f(nullptr); //pointer: 0x0
都可以編譯成功,不會造成編譯器的混淆。
完整代碼詳見cpp-code-snippets/NULL_nullptr.cpp。
參考連結
Bjarne Stroustrup’s C++ Style and Technique FAQ
NULL vs nullptr (Why was it replaced?) [duplicate] - Joe Z’s answer