使用 nullptr:相對 NULL 和 0 的優點
指針必須正確初始化以避免意外行為。而語法 int* p1 = nullptr;、int* p2 = NULL; 和 int* p3 = 0;可能看起來功能相同,但使用 nullptr 比其他兩個選項有顯著的優勢。
重載歧義解決:
考慮重載函數:
void f(char const *ptr); void f(int v); f(NULL); // ambiguous function call
使用NULL 時,編譯器無法確定要呼叫哪個函數,因為它可能是f(char const *) 或f(int)。這種歧義可能會導致意外的錯誤。然而,使用 nullptr 可以解決這個歧義:
f(nullptr); // calls f(char const *)
模板專業化:
在 C 中,nullptr 的類型是 nullptr_t。這允許 nullptr 的模板專門化,提供無與倫比的靈活性:
template<typename T, T *ptr> struct something{}; // primary template template<> struct something<nullptr_t, nullptr>{}; // partial specialization for nullptr
使用此專門化,您可以獨特地處理 nullptr 參數:
template<typename T> void f(T *ptr); // function to handle non-nullptr argument void f(nullptr_t); // overload to handle nullptr argument
以上是為什麼對於 C 中的指標來說,「nullptr」比「NULL」和「0」更好?的詳細內容。更多資訊請關注PHP中文網其他相關文章!