使用nullptr 的優點
考慮以下場景,其中三個指針以安全指針初始化的相同概念意圖進行初始化:
int* p1 = nullptr; int* p2 = NULL; int* p3 = 0;
乍一看,您選擇哪種方法似乎無關緊要。然而,當處理如下重載函數時,nullptr 的真正優勢變得顯而易見:
void f(char const *ptr); void f(int v); f(NULL); // Which function will be called?
有趣的是,函數f(int) 將被呼叫而不是f(char const *),儘管可能的意圖。這可能會導致微妙且難以檢測的錯誤。
解決方案在於利用 nullptr:
f(nullptr); // Now the first function will be called as expected
此外,nullptr 在模板中提供了額外的好處。請考慮以下內容:
template<typename T, T *ptr> struct something{}; // Primary template template<> struct something<nullptr_t, nullptr>{}; // Partial specialization for nullptr
由於nullptr 在模板中被識別為nullptr_t,因此可以建立專門用於處理nullptr 參數的重載:
template<typename T> void f(T *ptr); // Function for non-nullptr arguments void f(nullptr_t); // Overload for nullptr arguments
總之,nullptr 提供與NULL 和0 相比具有顯著優勢。它消除了函數重載中可能出現的歧義,並允許更明確地處理模板中的 nullptr 值,增強程式碼的整體安全性和可維護性。
以上是為什麼“nullptr”是指標初始化的最佳選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!