1. NULL 在C中定义如下
#define NULL (void *)0
而在c++中 NULL被定义为 0
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else /* __cplusplus */
#define NULL ((void *)0)
#endif /* __cplusplus */
#endif /* NULL */
这是由于,在C语言中,可以使用隐式转换,将(void*)转换为对应的指针类型,但是由于C++是不允许这样转换的,所以在C++的定义中 NULL 其实就只是代表0,所以C++11为了解决这个问题,提出nullptr的概念,它可以隐式的转换为任意指针类型。
2. C++中如果在空指针式直接使用0存在类型安全问题
//1.使用auto
//test函数的返回值类型此时是0 还是NULL呢?
auto res = test(a);
if(res == 0){
//todo
}
//2. 重载指针和整数类型
//如果存在以下函数 主函数调用时无法调用到int test(int *)
int test(int);
int test(int *);
int main()
{
test(0); //调用的是int test(int)
test(null); //调用的是int test(int)
}
总结: 在c++中用nullptr代表空指针。
//待补充~~