C++ nullptr

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,这是为了避免产生二义性。




你可能感兴趣的:(C++)