一文详解C++关键字nullptr及与NULL的区别

 更新时间:2023年06月14日 09:44:07   作者:天喜Studio  
这篇文章主要给大家详细介绍了C++关键字nullptr,及 NULL与nullptr的区别,文中通过代码示例介绍的非常详细,需要的朋友可以参考下

一、nullptr介绍✧

在C++中,引入了一个新的关键字——nullptr,用来代替旧版本的NULL

nullptr用于代表空指针,对于指针初始化时使用如下:

int* p1 = nullptr;   //关键字,代表空指针

之前用指针指向的new出来的堆空间,在回收时就可以将指针指向nullptr

int** p = new int*;
	free(p);
	p=nullptr;

既然nullptr与之前的NULL使用的方法一致,为什么还要引入nullptr关键字?

二、为什么需要nullptr ?

在学过【C/C++】函数重载的知识后,我们就能理解为什么需要nullptr关键字用来代替NULL宏定义

先来写一个函数重载的例子:

这两个函数的函数名相同,参数列表不同(一个是整型参数,一个是指针参数),构成函数重载

void fun9(int a)
{
	cout << __FUNCSIG__ << endl;
}
void fun9(int* p)
{
	cout << __FUNCSIG__ << endl;
}

此时我们在主函数中调用fun9函数,传参为空指针NULL

int main()
{
	fun9(NULL);	
	return 0;
}

查看运行结果:

输出的结果是void fun9(int a)函数

此时我不想调用指向整型的函数,而是要调用指向指针的函数,可传参又为空指针NULL,该如何实现呢?

在函数重载中提到过函数的函数的局部变量声明,可以实现调用指向指针的函数

我们来探究一下空指针NULL调用了void fun9(int a)(传参为整型)函数的原因

NULL为宏定义,其本质是整数0,这也就是在函数调用中,把NULL当作0调用了函数,而不是当作一个空指针 的原因。

因此我们需要一个代表空指针的关键字,而不是对整型0的宏替换

C++11中引入了空指针nullptr,专门用来代表空指针

使用nullptr成功地达到了调用传参为指针函数的目的:

总结为:

  • 在函数重载中,宏替换NULL整型0造成歧义 需要nullptr代表空指针而非整型0

  • 关键字nullptr提高了程序的类型安全性和可读性,与NULL宏定义相比,具有更强的可靠性和扩展性。

三、NULL和nullptr的区别✧

NULL和nullptr都能当作空指针进行使用,他们之间本质的区别是什么呢?

  • NULL是一个,替换的是0 ,而nullptr是关键字,代表空指针

  • 含义不同,nullptr 代表是空指针,NULL 代表整型数字0

  • nullptr可以清晰地表达代码的意图,能够避免在类型检查时出现一些歧义问题

nullptr只能用于指针类型,不能与整数类型混淆~

到此这篇关于一文详解C++关键字nullptr及与NULL的区别的文章就介绍到这了,更多相关C++ nullptr与NULL区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • for循环中删除map中的元素valgrind检测提示error:Invalid read of size 8

    for循环中删除map中的元素valgrind检测提示error:Invalid read of size 8

    这篇文章主要介绍了for循环中删除map中的元素valgrind检测提示error:Invalid read of size 8 的相关资料,需要的朋友可以参考下
    2016-07-07
  • C++中的三种继承public,protected,private详细解析

    C++中的三种继承public,protected,private详细解析

    我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员。然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限
    2013-09-09
  • C++堆(Heap)与栈(Stack)内存详解

    C++堆(Heap)与栈(Stack)内存详解

    这篇文章主要介绍了C++堆(Heap)与栈(Stack)内存详解,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-05-05
  • C++类和对象之类的6个默认成员函数详解

    C++类和对象之类的6个默认成员函数详解

    类是对某一事物的抽象描述,具体地讲类是C++中的一种构造的数据类型,下面这篇文章主要给大家介绍了关于C++类和对象之类的6个默认成员函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • C语言基于哈希表实现通讯录

    C语言基于哈希表实现通讯录

    这篇文章主要为大家详细介绍了C语言基于哈希表实现通讯录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • C++实现LeetCode(15.三数之和)

    C++实现LeetCode(15.三数之和)

    这篇文章主要介绍了C++实现LeetCode(三数之和),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • VC++中HTControl控件类之CHTRichEdit富文本编辑控件实例

    VC++中HTControl控件类之CHTRichEdit富文本编辑控件实例

    这篇文章主要介绍了VC++中HTControl控件类之CHTRichEdit富文本编辑控件,是一个比较实用的功能,需要的朋友可以参考下
    2014-08-08
  • C语言 数据结构之中序二叉树实例详解

    C语言 数据结构之中序二叉树实例详解

    这篇文章主要介绍了C语言 数据结构之中序二叉树实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • 初识C++ Vector模板与实例化原理

    初识C++ Vector模板与实例化原理

    这篇文章主要为大家介绍了初识C++ Vector模板与实例化原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 使用c语言输出杨辉三角形的简单方法

    使用c语言输出杨辉三角形的简单方法

    这篇文章主要给大家介绍了关于如何使用c语言输出杨辉三角形的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论