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 サイトの他の関連記事を参照してください。