C语言中NULL是指空指针,一般定义为函数
#define NULL ((void *)0)
能够把空指针赋给其余类型的指针,由于在编译的时候能够隐式类型转换。指针
可是C++的编译器不容许将void*类型的指针隐式转换为其余类型的指针。code
因此C++中是这样定义NULL的blog
#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif
因此C++中的NULL其实是0。编译器
可是若是咱们在C++中仍是把NULL当成void*来用可能会出问题。io
好比下面的函数重载的状况编译
void myFunc(void* p) { std::cout << "call myFunc(void* p)" << std::endl; } void myFunc(int p) { std::cout << "call myFunc(int p)" << std::endl; }
int main(int argc, char* argv[]) { std::cout << "myFunc(NULL) will call function " << std::endl; myFunc(NULL); std::cout << "myFunc(nullptr) will call function " << std::endl; myFunc(nullptr); system("pause"); return 0; }
原本想用NULL表明空指针调用myFunc(void* p)函数,实际却调用了myFunc(int p)。function
所以,C++11中引入了nullptr这个关键字来表示空指针。上面的nullptr做为实参确实也正确调用了。class