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++ では の定義は
NULL
0 なので、見た目の違いしかありません。私はマクロを避けたいので 0 を使用します。 のもう 1 つの問題は、NULL
が 0 と異なる、または整数ではないと誤解されることがあることです。標準以前のコードでは、NULL
が不適切な値に定義されることがあり、そのため避ける必要がありました。これは最近ではあまり一般的ではありません。ヌル ポインターに名前を付ける必要がある場合は、 と呼びます
nullptr
。これは C++11 での名前です。次に、 がnullptr
キーワードになります。
そうは言っても、小さなことは気にしないでください。