对于有一定编程基础的人对于NULL这个毫不陌生,但是NULL并不是一个关键字而是一个宏,他在C语言中这样定义:
#define NULL (void*)0
被定义为了一个(void*)0的宏,所以NULL是一个不指向任何对象的指针,也可以用0表示。这样定义在C语言中使用是毫无问题的。但是,C++由于函数重载的问题,重新通过宏定义NULL,C++中的定义如下:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
可以看出,C++把NULL定义为了0,而不是C语言中的(void *)0;但是这样做,还是会造成函数的二义性,因为C++有参数类型的隐式转化问题。下面我们通过一段代码来讲解一下问题所在,代码如下:
void func(int a){
printf("this is int a = %d",a);
}
void func(char* a){
printf("this is char* a = %s",a);
}
int main(int argc, const char * argv[])
{
func(0);
return 0;
}
当我们在mai