Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C++11中的指针空值nullptr

一、为什么要有指针空值nullptr在良好的编码习惯中,声明一个指针并对其进行初始化非常重要,未初始化的悬挂指针常导致一些难以调试的错误。往常,我们常这样初始化指针变量:int* my_ptr1=0;
int* my_ptr2=NULL;但我们知道,NULL其实是一个宏定义,字面常量为0,即上述两种方式本质上是一样的。于是,这样就有了一些麻烦,比如函数重载时,我们定义了如下两个版本的函数:#include<iostream>
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;
}结果如下:
 
可见,f(NULL)并没有调用想要的指针版本,而是调用了f(int)版本,这是因为NULL被定义为0,编译器总是优先把0视为一个整型常量造成的。0在C++98中是有二义性的,编译器首先解释它是一个整型常量,其次是一个无类型指针(void*)。 更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-05/101440p2.htm 推荐阅读C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm读C++ Primer 之构造函数陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm读C++ Primer 之智能指针 http://www.linuxidc.com/Linux/2011-08/40177.htm读C++ Primer 之句柄类 http://www.linuxidc.com/Linux/2011-08/40175.htmC++11 获取系统时间库函数 time since epoch http://www.linuxidc.com/Linux/2014-03/97446.htmC++11中正则表达式测试 http://www.linuxidc.com/Linux/2012-08/69086.htm