1. 为什么会有nullptr的出现

目的:nullptr的出现主要是为了替代NULL。

那么,为什么要替代NULL呢?

在NULL的定义中存在会有2种方式,有的编译器会将NULL定义成0,有的编译器会将NULL定义成((void*)0)。

那么,这两种定义方式会对c++有什么区别呢?

在c++中不允许( void* )隐式的转成其他类型,在某些编译器把NULL定义成((void*)0)的情况下,当你定义变量去赋值NULL时候,NULL就会变定义为0。

另外,这种问题也会对c++的重载特性造成混乱。

接下来,进行代码演示

2. 代码演示

这里编写了MyClass类,里面有两个重载函数printf

#include <iostream>
using namespace std; class MyClass
{
public:
MyClass() {}
~MyClass() {} public:
void printf(char *) /*重载函数*/
{
cout << "This is char*" << endl;
} void printf(int) /*重载函数*/
{
cout << "This is int" << endl;
}
}; int main(int argc, char **argv)
{ return 0;
}

接下来,我们new一个MyClass对象 a并调用成员函数printf,传入NULL

#include <iostream>
using namespace std; class MyClass
{
public:
MyClass() {}
~MyClass() {} public:
void printf(char *) /*重载函数*/
{
cout << "This is char*" << endl;
} void printf(int) /*重载函数*/
{
cout << "This is int" << endl;
}
}; int main(int argc, char **argv)
{
MyClass a; a.printf(NULL); return 0;
}

调试结果

以上可以看到,传入NULL时,调用printf(int), 与我们的本意调用printf(char*)相违背。

我们看看编译现在把NULL定义为哪种方式,我使用的是vs2017

可以看到将NULL定义0

接下来,我们的主角nullptr就出场了,将主函数里面的调用方式修改一下

int main(int argc, char **argv)
{
MyClass a; a.printf(nullptr); return 0;
}

调试结果

可以看到调用的printf(char*),这样nullptr和NULL的区别就出来了。

另外,nullptr能隐式转换成各类型指针,可以看看以下代码

3. 总结

在现代c++编程中,如遇到要使用NULL的地方,就尽量使用nullptr去替代NULL吧。

最新文章

  1. JS组件系列——Bootstrap 树控件使用经验分享
  2. java 实现 LINQ 的一些框架记录一下
  3. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
  4. java 导出Excel 大数据量,自己经验总结!
  5. (5)jvm垃圾回收器相关垃圾回收算法
  6. Servlet编码和解码
  7. ios获取本地音乐库音乐很详细 扫描IPHONE本地音乐文件,获得音乐名,歌手名代码示例
  8. java--多线程之前台幕后
  9. Android Studio和eclipse混淆打包总结
  10. 浅谈JS中的高级函数
  11. filddler一个抓包修改的工具 貌似很强大2017.12.07
  12. SpringBoot前端模板
  13. 《Mysql 分区分表》
  14. Java Day26进程01天
  15. Qt 编程指南10 QImage Mat QPixmap转换
  16. 边沿检测方法-FPGA入门教程
  17. delphi 关于 &quot;高位&quot; 与 &quot;低位&quot;
  18. JQUERY框架的优点与面试题
  19. git使用合集
  20. php浮点数比较

热门文章

  1. centos8.2-2004
  2. RHEL_高级磁盘管理(vdo、stratis)
  3. Kali Linux 安装中文输入法
  4. Zabbix 架构
  5. xl release 安装
  6. Scala 中的可变(var)与不可变(val)
  7. 韩小韩 API接口
  8. C语言编译器开发之旅(一):词法分析扫描器
  9. Linux 文件不能被root修改与编辑原因
  10. 八、Pandas 表格处理