C++では、ポインタベースのアプリケーションで0x
またはNULL
がnullptr
に置き換えられたことを私は知っています。私が彼らがこの置き換えをした正確な理由についてただ興味がありますか?
ポインターを扱うときに、どのシナリオでnullptr
よりもNULL
を使用すると効果的ですか。
nullptr
は常にポインタ型です。 0
(別名、CのNULLをC++にブリッジする)は、とりわけ、オーバーロードされた関数の解決にあいまいさをもたらす可能性があります。
f(int);
f(foo *);
あなたはそれがなぜ置き換えられたのかについての良い説明を見つけることができます nullポインタの名前:nullptr 、論文を引用するために:
この問題は次のカテゴリに分類されます。
ライブラリ作成者が整数型やポインタ型のオーバーロードについて心配する必要がないように、ユーザーがあいまいさの少ないコードを作成する方法を提供することで、ライブラリ構築のサポートを改善します。
整数0とnullptrの両方を明確に表現することをより簡単にすることによって、ジェネリックプログラミングのサポートを改善します。
C++を教えやすく、習得しやすくする。
これは Bjarne Stroustrupの言葉遣い です
C++では、NULLの定義は0なので、審美的な違いだけがあります。私はマクロを避けることを好むので、私は0を使う。NULLに伴うもう一つの問題は、人々がそれが0と違う、あるいは整数ではないと誤解することが時々あるということである。標準化前のコードでは、NULLは不適切なものとして定義されていたため、回避する必要がありました。最近はそれほど一般的ではありません。
Nullポインタに名前を付ける必要がある場合は、nullptrと呼びます。それがC++ 11で呼ばれていることです。そして、 "nullptr"がキーワードになります。
1つの理由:リテラル0
は、タイプint
を取得するという悪い傾向があります。テンプレート型の引数として、完全な引数転送、またはより一般的なもので。
もう1つの理由:コードの読みやすさと明確さ。