C++ ではポインターに NULL または 0 (ゼロ) を使用しますか? 質問する

C++ ではポインターに NULL または 0 (ゼロ) を使用しますか? 質問する

C++ が C 上にボルトで固定された初期の頃は、 NULL は として定義されていたため使用できませんでした(void*)0。 以外のポインタに NULL を割り当てることはできずvoid*、そのため役に立たないものでした。当時は、0ヌル ポインタには (ゼロ) を使用することが認められていました。

今日まで、私はゼロをヌルポインタとして使い続けていますが、私の周りの人たちは を使うことを主張していますNULL。個人的には、既存の値に名前 ( ) を付けることにメリットはないと思いますNULL。また、ポインタを真理値としてテストしたいので、

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

ゼロを使​​用する方が理にかなっています ( を使用する場合NULL、論理的に を使用することはできませんp && !q。 がゼロであると想定しない限り、 と明示的に比較する必要がありますNULL。 がゼロであると想定する場合はNULL、 を使用する理由はありませんNULL)。

NULL よりもゼロを優先する (またはその逆) 客観的な理由はあるのでしょうか、それともすべて個人的な好みなのでしょうか?

編集: RAII と例外では、ゼロ/NULL ポインターを使用することはほとんどありませんが、それでも必要な場合もあります (元々そう言うつもりでした)。

ベストアンサー1

これについての Stroustrup 氏の見解は次のとおりです。C++ スタイルとテクニックに関する FAQ

C++ では の定義はNULL0 なので、見た目の違いしかありません。私はマクロを避けたいので 0 を使用します。 のもう 1 つの問題は、NULLが 0 と異なる、または整数ではないと誤解されることがあることです。標準以前のコードでは、NULLが不適切な値に定義されることがあり、そのため避ける必要がありました。これは最近ではあまり一般的ではありません。

ヌル ポインターに名前を付ける必要がある場合は、 と呼びますnullptr。これは C++11 での名前です。次に、 がnullptrキーワードになります。

そうは言っても、小さなことは気にしないでください。

おすすめ記事