回答:
NULL
はキーワードではありません。これは、一部の標準ヘッダーで定義されている識別子です。含めることができます
#include <cstddef>
のような他のいくつかの基本を含め、それを範囲内に含めることstd::size_t
。
nullptr
、実際のキーワードであり、#include
sを必要としないキーワードについて言及する価値があるかもしれません。また、よりタイプセーフですNULL
。
GCCはC ++ 11に向けて一歩を踏み出しています。これがおそらく、NULL定数を使用するためにcstddefを含める必要がある理由です。C ++ 11で推奨される方法は、バージョン4.6以降にGCCに実装されている新しいnullptrキーワードを使用することです。nullptrは暗黙的に整数型に変換できないため、ポインター型と整数型の両方でオーバーロードされている関数の呼び出しを明確にするために使用できます。
void f(int x);
void f(void * ptr);
f(0); // Passes int 0.
f(nullptr); // Passes void * 0.
NULL
組み込みのキーワードではありません。これは<stddef.h>
(または<cstddef>
)を含むいくつかの標準Cヘッダーで定義されたマクロです。gccが「C ++ 11に向けて一歩を踏み出した」ことはこれにどのような影響を与えますか (目に見えない)コードが以前のバージョンのgcc / g ++または以前のバージョンの言語標準でコンパイルされたことを意味する質問には何も見当たりません。