iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中NULL与nullptr的区别有什么不同
  • 230
分享到

C++中NULL与nullptr的区别有什么不同

2023-06-15 02:06:09 230人浏览 薄情痞子
摘要

这篇文章主要介绍c++中NULL与nullptr的区别有什么不同,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、C程序中的NULL在C语言中,NULL通常被定义为:#define NULL ((void *)0)所

这篇文章主要介绍c++中NULL与nullptr的区别有什么不同,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、C程序中的NULL

C语言中,NULL通常被定义为:#define NULL ((void *)0)

所以说NULL实际上是一个空指针,如果在C语言中写入以下代码,编译是没有问题的,因为在C语言中把空指针赋给int和char指针的时候,发生了隐式类型转换,把void指针转换成了相应类型的指针。

int  *pi = NULL;char *pc = NULL;

二、C++程序中的NULL

但是问题来了,以上代码如果使用C++编译器来编译则是会出错的,因为C++是强类型语言,void*是不能隐式转换成其他类型的指针的,所以实际上编译器提供的头文件做了相应的处理:

#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif

可见,在C++中,NULL实际上是0.因为C++中不能把void*类型的指针隐式转换成其他类型的指针,所以为了结果空指针的表示问题,C++引入了0来表示空指针,这样就有了上述代码中的NULL宏定义。

但是实际上,用NULL代替0表示空指针在函数重载时会出现问题,程序执行的结果会与我们的想法不同,举例如下:

#include <iOStream>using namespace std; void func(void* i){ cout << "func1" << endl;} void func(int i){ cout << "func2" << endl;} void main(int arGC,char* argv[]){ func(NULL); func(nullptr); getchar();}

C++中NULL与nullptr的区别有什么不同

在这段代码中,我们对函数func进行可重载,参数分别是void*类型和int类型,但是运行结果却与我们使用NULL的初衷是相违背的,因为我们本来是想用NULL来代替空指针,但是在将NULL输入到函数中时,它却选择了int形参这个函数版本,所以是有问题的,这就是用NULL代替空指针在C++程序中的二义性。

三、C++中的nullptr

为解决NULL代指空指针存在的二义性问题,在C++11版本(2011年发布)中特意引入了nullptr这一新的关键字来代指空指针,从上面的例子中我们可以看到,使用nullptr作为实参,确实选择了正确的以void*作为形参的函数版本。

总结

NULL在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后还是都用nullptr替代NULL吧,而NULL就当做0使用。

其他:在没有C++ 11的nullptr的时候,我们怎么解决避免这个问题呢?

const class nullptr_t{public:    template<class T>    inline operator T*() const        { return 0; }     template<class C, class T>    inline operator T C::*() const        { return 0; } private:void operator&() const;} nullptr = {};

以上是“C++中NULL与nullptr的区别有什么不同”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网其他教程频道!

--结束END--

本文标题: C++中NULL与nullptr的区别有什么不同

本文链接: https://www.lsjlt.com/news/276888.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中NULL与nullptr的区别有什么不同
    这篇文章主要介绍C++中NULL与nullptr的区别有什么不同,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、C程序中的NULL在C语言中,NULL通常被定义为:#define NULL ((void *)0)所...
    99+
    2023-06-15
  • C++中NULL与nullptr的区别对比
    前言 在编写C程序的时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL...
    99+
    2022-11-12
  • C++中nullptr 和 NULL 的区别及用法
    1. 为什么会有nullptr的出现 目的:nullptr的出现主要是为了替代NULL。 那么,为什么要替代NULL呢? 在NULL的定义中存在会有2种方式,有的编译器会将NULL定...
    99+
    2022-11-12
  • SQL中IS NOT NULL与!=NULL的区别是什么
    今天就跟大家聊聊有关SQL中IS NOT NULL与!=NULL的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。查询一: SELEC...
    99+
    2022-10-18
  • NULL与MySQL空字符串有什么区别
    本篇内容主要讲解“NULL与MySQL空字符串有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“NULL与MySQL空字符串有什么区别”吧!  下述语句是...
    99+
    2022-10-18
  • javascript中undefined与null的区别有哪些
    今天小编给大家分享一下javascript中undefined与null的区别有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-07-02
  • JS基础中undefined与null的区别是什么
    这期内容当中小编将会给大家带来有关JS基础中undefined与null的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在JavaScript开发中,被人问到:...
    99+
    2022-10-19
  • mysql中空值与null的区别有哪些
    小编给大家分享一下mysql中空值与null的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql中在进行count()统计某列的记录数的时候,如果...
    99+
    2023-06-14
  • GetType与typeof在C#中有什么区别
    这篇文章将为大家详细讲解有关GetType与typeof在C#中有什么区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、GetType()与typeof() 1、typeof(...
    99+
    2023-06-15
  • Oracle中Null与空字符串的区别是什么
    本篇文章为大家展示了Oracle中Null与空字符串的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。含义解释: 问:什么是NULL? ...
    99+
    2022-10-18
  • Python与C语言的区别有什么
    Python与C语言的区别有什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、语言类型Python是一种基于解释器的语言,解释器会逐行读取代码;首先将Pyt...
    99+
    2023-06-15
  • golang与C语言有什么区别
    golang与C语言的区别:1、golang是一门面向对象的编程语言,而C语言是一门面向过程的编程语言;2、golang通过包来管理代码,而C语言通过文件来管理代码;3、golang中一共有25个关键字,而C语言中一共有32个关键字;4、占...
    99+
    2023-07-10
  • 不同平台上的mysql有什么区别
    这篇文章将为大家详细讲解有关不同平台上的mysql有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。这个文件中包含了不同基准测试的结果。 测试结果后()中的数字表示...
    99+
    2022-10-18
  • null值在oracle和mysql中有什么不同
    本篇内容主要讲解“null值在oracle和mysql中有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“null值在oracle和mysql中有什么不同...
    99+
    2022-10-18
  • C++指针与引用有什么区别
    这篇文章将为大家详细讲解有关C++指针与引用有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、引用与指针的区别指针和引用的原理非常的相似,所以很多时候尤其是面试的时候经常会拿来比较。本文来梳理一...
    99+
    2023-06-25
  • 不同代理ip的质量有什么区别
    这篇文章主要介绍“不同代理ip的质量有什么区别”,在日常操作中,相信很多人在不同代理ip的质量有什么区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”不同代理ip的质量有什么区别”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • C#中Backgroundworker与Thread的区别是什么
    本篇内容介绍了“C#中Backgroundworker与Thread的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Backg...
    99+
    2023-07-02
  • C++中const与constexpr的区别是什么
    这篇文章主要讲解了“C++中const与constexpr的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中const与constexpr的区别是什么”吧!一.const常量...
    99+
    2023-06-21
  • Java中的对象与C++中的对象有什么区别
    Java中的对象与C++中的对象有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java中对象与C++中对象的放置安排的对比概要:Java中,所有的对象都存放在堆(He...
    99+
    2023-05-31
    java c++ ava
  • c与javascript的区别是什么
    这篇文章主要介绍“c与javascript的区别是什么”,在日常操作中,相信很多人在c与javascript的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c与ja...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作