文章插图
C/C++中,为了避免野指针(即指针没有指向任何地址)的出现,声明一个指针后,最好马上对其进行初始化 。
如果暂时不明确指针指向哪个变量,则可以赋予NULL,如:
int* p = NULL;
除了NULL之外,C++11新标准引入了nullptr来表示一个空指针 。nullptr 既不是整型类型,也不是指针类型,nullptr 的类型是 std::nullptr_t,能转换成任意的指针类型 。
为什么建议使用nullptr代替NULL呢?
这是因为在C++中,NULL是被定义为0的常量,当遇到函数重载时,就会出现问题 。
C++覆盖和重载的区别
比如有下面两个函数时:
- void foo(int n)
- void foo(char* s)
函数重载:C++允许在同一作用域中声明多个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同 。
#include <IOStream>using namespace std;void foo(int n) {cout << "foo(int n)" << endl;}void foo(char* s) {cout << "foo(char* s)" << endl;}int main(){foo(NULL);return 0;}
编译上述代码,结果如下图所示,编译器提示有两个函数都可能匹配,产生二义性 。文章插图
而用nullptr,编译器则会选择 foo(char* s)的函数,因为nullptr不是整数类型 。
#include <iostream>using namespace std;void foo(int n) {cout << "foo(int n)" << endl;}void foo(char* s) {cout << "foo(char* s)" << endl;}int main(){foo(nullptr);return 0;}
【C++空指针使用nullptr代替NULL】运行结果如下图所示:文章插图
因此,当需要使用空指针时,优先使用nullptr,而非NULL 。
推荐阅读
- 罕见!美国上空惊现巨型发光火柱 美国天空出现神秘火球
- 时空被扭曲为什么会产生引力 时空扭曲会发生什么
- 编写C程序控制LED
- 载人航天第一个进入太空的人 世界第一例载人航天产生在
- 第四维空间是什么 宇宙四维空间
- 夏季养生茶,适合夏季的茶饮![养生茶]
- 昨晚天空有不明飞行物是什么 今天凌晨天空出现不明飞行物
- 电影|《雷神4》首支中文预告发布!定档7月、阵容空前强大
- 射电望远镜|中国空间站将支持上千项科学研究:明年发射空间巡天望远镜
- 贵州的空中怪车 贵阳空中怪车事件真相