1. ホーム
  2. c++

[解決済み】C++でポインタにNULLと0(ゼロ)のどちらを使うか?

2022-04-15 22:59:51

質問

C++がC言語の上にボルトで固定された初期の頃、NULLは次のように定義されていたので使うことができませんでした。 (void*)0 . 以外のポインタに NULL を代入することはできませんでした。 void* ということで、ちょっと使い勝手が悪かったです。その当時は 0 (ゼロ)はヌルポインタの場合です。

今日に至るまで、私はゼロをヌルポインターとして使い続けてきましたが、周りの人はどうしても NULL . 個人的には、名前を付けることに何のメリットも感じないのですが ( NULL そして、私はポインタを真実の値としてテストするのが好きなのです。

if (p && !q)
  do_something();

を使用する場合、ゼロを使用する方がより理にかなっています(例えば、あなたが NULL を使用すると、論理的に p && !q - との比較を明示的に行う必要があります。 NULL を想定していない限り NULL がゼロの場合、なぜ NULL ).

NULLより0を好む客観的な理由はあるのでしょうか、それとも単なる個人の好みなのでしょうか?

編集:RAIIと例外を使えば、ゼロ/NULLポインタを使うことはほとんどありませんが、それでも必要な場合があることを付け加えておきます(もともと言うつもりでした)。

解決するには?

以下は、Stroustrupの見解です。 C++のスタイルとテクニックに関するFAQ

<ブロッククオート

C++では、以下のように定義されています。 NULL は0なので、見た目の違いだけです。私はマクロを避けたいので0を使っています。 NULL は、0と違う、あるいは整数でないと誤解されることがあります。標準化以前のコードでは NULL は、不適切なものとして定義されることがあり、そのため避けなければならないことがありました。最近はあまり見かけなくなりました。

ヌルポインターに名前を付ける必要がある場合、その名前を nullptr C++11ではそのように呼ばれています。 では。 nullptr はキーワードになります。

とはいえ、小さなことで悩まないでください。