ホームページ > バックエンド開発 > C++ > C のポインタとして、「nullptr」が「NULL」や「0」よりも優れた選択肢であるのはなぜですか?

C のポインタとして、「nullptr」が「NULL」や「0」よりも優れた選択肢であるのはなぜですか?

Linda Hamilton
リリース: 2024-11-08 12:55:02
オリジナル
283 人が閲覧しました

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;機能的には同等に見えるかもしれませんが、他の 2 つのオプションに比べて 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート