#define NULL implementation-defined
概要
マクロNULLは、処理系定義のヌルポインタ定数に展開される。
ヌルポインタ定数は、ポインタがいかなるオブジェクトも指し示さないことを表現するために使われる。
マクロNULLは、以下の標準ヘッダにおいて定義される:
<clocale><cstddef><cstdio><cstdlib><cstring><ctime><cwchar>
例
#include <cstddef>
int main() {
int* p = NULL;
delete p;
}
備考
C++03において、「ヌルポインタ定数」は「値が0になる整数定数式」と定義されていた。したがって、マクロNULLの値として0や0Lは規格に適合するが、(void*)0は整数定数式ではないため適合しない。
C++11では、「ヌルポインタ定数」の定義に「std::nullptr_t型のprvalue」が追加されたため、nullptrも規格に適合する。しかし、NULLの値の型が変わるとコードの互換性を損なうことから、当面の間NULLの値は整数定数式であると思われる。C++11以降はNULLではなくnullptrを使用するとよい。