C++ では通常、ポインターが null かどうかをチェックします。
if(NULL == ptr)
それ以外の:
if(ptr == NULL)
なぜ知りたいのですか?
さらに、ptr を null に初期化したい場合は、 or を使用する必要がありますptr = NULL
かptr = 0
? はい、私はC++でptr = nullptr
知っています. ありがとう
if ステートメントの代わりに書くことを避けるためのコーディング スタイル ( Yoda Conditionsという名前)です。if ステートメントで代入を使用することは有効ですが、通常、それはあなたが望むものではありません。=
==
=
個人的には、このように使用することはお勧めしません。これは読みにくく=
、if ステートメントで使用すると最新のコンパイラで警告が表示されるためです。
また、次の点にも注意してください。
if(ptr == NULL)
と同じif(!ptr)
です。nullptr
れ、 using が置き換えられましNULL
た。したがって、ヌルポインタを初期化するには、使用することをお勧めしますptr = nullptr
nullptr
over を使用する理由についてNULL
:
C++11 より前でNULL
は、通常は として内部的に実装されて#define NULL 0
いますが、問題は、0
整数ゼロでもあることです。場合によってはトラブルの原因となります。例えば:
void func(int n);
void func(char *s);
func(NULL); //call which function?
NULL
作者はそれがポインタ型であることを暗示していますが、コンパイラはfunc(0)
. したがって、最初のバージョンが呼び出されます。
を使用するfunc(nullptr)
と、コンパイラはそれがポインターであることを認識し、2 番目のバージョンを呼び出します。
=
yoda の等価性を使用すると、単一の使用や、コンパイラがスマート ポインターから整数を決定しようとする場所など、特定の間違いを防ぐことができます。
知られている
ヨーダは悪い考えだと彼らが考えているので、私はそのエラーを追跡するのに2日間費やしました.