0.nullptr是C++11中新引入的常量,专门用来表示空值指针。
1.在C中,把(void *)0定义成NULL来初始化指针,表示空值指针。
2.在C++中,把0定义成NULL来初始化指针,表示空值指针。
这样在函数重载时会发生问题,如两个函数为
func(int);
func(char *);
调用时,func(0),会调用哪个函数,0作为一个整数还是作为空值指针?产生了二义性。
3.于是引入新的常量nullptr,其值为(void *)0,专门用来表示空值指针。
这样func(0)调用func(int);func(nullptr)调用func(char *),完美地解决二义性问题。
4.nullptr是nullptr_t的一个实例,等价于(void *)0,即空值无类型指针;nullptr_t,等价于void *,即无类型指针。
5.nullptr能够转换成任何指针类型,包括成员函数指针和成员变量指针;
能够转换成bool类型,这是为了兼容普通指针都能使用if(ptr)判断是否为空指针的形式;
但是不能被转换为整数0,这是为了避免产生二义性。