首頁 > 後端開發 > C++ > 主體

為什麼對於 C 中的指標來說,「nullptr」比「NULL」和「0」更好?

Linda Hamilton
發布: 2024-11-08 12:55:02
原創
245 人瀏覽過

Why is `nullptr` a Better Choice than `NULL` and `0` for Pointers in C  ?

使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板