5

C++ では通常、ポインターが null かどうかをチェックします。

if(NULL == ptr)

それ以外の:

if(ptr == NULL)

なぜ知りたいのですか?

さらに、ptr を null に初期化したい場合は、 or を使用する必要がありますptr = NULLptr = 0? はい、私はC++でptr = nullptr知っています. ありがとう

4

2 に答える 2

12

if ステートメントの代わりに書くことを避けるためのコーディング スタイル ( Yoda Conditionsという名前)です。if ステートメントで代入を使用することは有効ですが、通常、それはあなたが望むものではありません。====

個人的には、このように使用することはお勧めしません。これは読みにくく=、if ステートメントで使用すると最新のコンパイラで警告が表示されるためです。

また、次の点にも注意してください。

  1. if(ptr == NULL)と同じif(!ptr)です。
  2. C++11 が導入さnullptrれ、 using が置き換えられましNULLた。したがって、ヌルポインタを初期化するには、使用することをお勧めしますptr = nullptr

nullptrover を使用する理由について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 番目のバージョンを呼び出します。

于 2013-07-21T12:42:39.140 に答える
1

=yoda の等価性を使用すると、単一の使用や、コンパイラがスマート ポインターから整数を決定しようとする場所など、特定の間違いを防ぐことができます。

知られている

ヨーダは悪い考えだと彼らが考えているので、私はそのエラーを追跡するのに2日間費やしました.

于 2013-07-21T13:00:27.593 に答える