c/c++中的NULL
- 共同点:c/c++都有NULL,它是一个宏,值是一个空指针常量
- 不同点:
- c将(void *)0作为空指针常量,因为c允许(void *)和其它指针类型相互隐式转换
- c++将0作为空指针常量,因为c++不允许(void *)和其它类型相互隐式转换
- 总结:c++中0既是空指针常量,也是整形常量
nullptr的引入
-
c++中使用NULL可能会导致二义性
#include<stddef.h> void foo(int){} //#1 void foo(char*){} //#2 int main(){ foo(NULL); //调用#1还是#2 }
此时,编译器将执行#1,与函数定义顺序无关
-
引入nullptr
-
nullptr能够根据环境自动转换成相应的指针类型,但是不会被转换成任何整形
-
nullptr仍然存在一定问题
void foo(char *ptr) void foo(int *ptr)
此时无法区分实际调用哪个函数,必须显示指明类型,如:
foo(static_cast<char*>(nullptr))
-