void*和NULL和nullptr的区别

在C语言中有如下定义

1
#define NULL ((void*)0)

void* 是一个万金油,可以转换为任何其他指针,所以在这儿用值为0的void*表示空指针

然而在C++中定义如下

1
2
3
4
5
6
7
#ifndef NULL
#ifdef _cplusplus
#define NULL 0
#else
#define NULL ((void*)0)
#endif
#endif

在C++中,如果使用C++编译器,NULL将会被直接定义为0,如果使用C语言编译器才会延续((void*)0)的定义

在C++11中规定,nullptr用来表示((void*)0),而NULL只表示0