C言語において、NULLは
#define NULL 0
又は
#define NULL ((void*)0)
と定義されていた(処理系によりまちまち)。しかし、C++言語においては型チェックが厳しくなった(厳しくした)ため、このような定義だと問題がある。例えば
int* p;
p = NULL;
とすると、コンパイラに怒られる(void* をint*
に変換できません、等)。そこで、C++言語では
#define NULL 0
とした上で、0を"何も指していないことを示すポインタリテラル"と定義することにした。(アドレスが0というわけではないので注意)
これで上の問題は解決される。