物联网/嵌入式工程师
重磅升级:新增硬件电路设计与实战,让你软硬通吃,同级PK无敌!行业风口、政策倾斜,新晋热门高薪不内卷!0基础一站式就业完整路径,抢占先发优势!
int * p = NULL;
int * p = nullptr;
这一小节来看看两者的区别。
首先看 NULL,在 C++ 中,NULL 其实就是 0。
例如:
int * p = NULL;
等价于:
int * p = 0;
因为在 C++ 中,0 地址通常是被保护起来的,不可访问的。因此用 0 地址来指代这个指针哪里都不指,是可以的。但是这里面却存在一些问题。因为 NULL 就是 0,所以我们可以把 NULL 用在其他地方。
例如:
int a = NULL;
我们可以将一个 int 变量赋值成 NULL,你永远无法阻止有人这么干。而在某些情况下,甚至会在不经意间酿成惨剧。
例如:
class A
{
public:
void func(void * t)
{
}
void func(int i)
{
}
}
这个类中,func 函数有两个重载。这个时候,我们尝试用 NULL 调用一下:
int main(int argc,char **argv)
{
A a;
a.func(NULL);
return 0;
}
猜猜这个函数到底调用的哪个重载?
正是由于 NULL 会导致这样的混乱,所以在 C++11 标准之后,C++ 标准委员会为 C++ 添加了 nullptr 关键字。我们可以将 NULL 赋值给一个普通变量,而 nullptr 却不能。
int a = nullptr;
这样是会直接报错的。
nullptr 只能赋值给指针,所以不会有 NULL 那样的问题。
所以,只要你的编译器兼容 C++11 标准,那么你应该使用 nullptr。
请验证,完成请求
由于请求次数过多,请先验证,完成再次请求
打开微信扫码自动绑定
绑定后可得到
使用 Ctrl+D 可将课程添加到书签
举报