设为首页 加入收藏

TOP

C++11中的指针空值nullptr
2014-11-23 23:22:54 来源: 作者: 【 】 浏览:7
Tags:指针 空值 nullptr

一、为什么要有指针空值nullptr


在良好的编码习惯中,声明一个指针并对其进行初始化非常重要,未初始化的悬挂指针常导致一些难以调试的错误。往常,我们常这样初始化指针变量:


int* my_ptr1=0;
int* my_ptr2=NULL;


但我们知道,NULL其实是一个宏定义,字面常量为0,即上述两种方式本质上是一样的。于是,这样就有了一些麻烦,比如函数重载时,我们定义了如下两个版本的函数:


#include
using namespace std;
void f(char* c)
{
cout << "invoke f(char* c)" << endl;
}
void f(int i)
{
cout << "invoke f(int)" << endl;
}
int main()
{
f(0);
f(NULL);
f((char*)0);
f(nullptr);
return EXIT_SUCCESS;
}


结果如下:


C++11中的指针空值nullptr

可见,f(NULL)并没有调用想要的指针版本,而是调用了f(int)版本,这是因为NULL被定义为0,编译器总是优先把0视为一个整型常量造成的。0在C++98中是有二义性的,编译器首先解释它是一个整型常量,其次是一个无类型指针(void*)。




推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇《C++ Primer》 对象、数组、基于.. 下一篇《UNIX环境高级编程》第二版源码..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: