C で NULL が nullptr に置き換えられたのはなぜですか?
C では、NULL マクロが NULL ポインターを表すために使用されました。ただし、C 0x では、NULL は新しいキーワード nullptr に置き換えられました。この変更はいくつかの理由から行われました。
-
型安全性の向上: NULL は暗黙的に任意のポインター型に変換できます。これにより、オーバーロードされた関数を呼び出すときにあいまいさが生じる可能性があります。たとえば、次の関数オーバーロード解決はあいまいです:
void f(int);
void f(foo *);
ログイン後にコピー
f(NULL) を呼び出すと、コンテキストに応じてどちらのオーバーロードにも一致する可能性があります。
-
コンパイル時エラー チェックの改善: nullptr には std::nullptr_t という型があり、これは異なるものです。他のタイプからも。これにより、コンパイラは、nullptr を非ポインター変数に割り当てるなど、誤ったコンテキストで nullptr を使用するときに、早期にエラーを検出できます。
-
他の言語との一貫性: nullptr キーワードは一貫しています。 Java や Java など、ヌル ポインタに個別のキーワードを使用する他のプログラミング言語では、 Python.
どのようなシナリオで nullptr を使用すると有益ですか?
次のシナリオでは、NULL の代わりに nullptr を使用すると有益です:
-
オーバーロードされた関数を呼び出す場合: nullptr のみが一致しますstd::nullptr_t とオーバーロード解決のポインター型。これによりあいまいさがなくなり、正しい関数オーバーロードが確実に呼び出されます。
-
テンプレートを使用する場合: nullptr を使用すると、テンプレートをより汎用的でタイプセーフな方法で作成できます。たとえば、ポインターを操作するテンプレートはデフォルト値として nullptr を使用でき、テンプレートを null ポインターで使用できるようにします。
以上がC で NULL が nullptr に置き換えられたのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。