精华内容
下载资源
问答
  • nullptr和null区别

    2021-04-11 15:50:02
    null在c语言中是表示空指针,其定义:#define NULL ((void *)0),null实际上是一个void * 的指针,在赋值使用过程中,null可以隐式转换为相应的类型。 int *p =null; C++中NULL是无法隐式转换为其他类型的,在C++中...

    null在c语言中是表示空指针,其定义:#define NULL ((void *)0),null实际上是一个void * 的指针,在赋值使用过程中,null可以隐式转换为相应的类型。

    int *p =null;
    

    C++中NULL是无法隐式转换为其他类型的,在C++中,null表示0,定义:#define NULL 0

    #ifdef __cplusplus ---简称:cpp c++ 文件
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif
    

    C++11中nullptr表示一个空指针,可以转换为任意类型的指针类型。

    void fun(int i){cout<<"1";};
    void fun(char *p){cout<<"2";};
    int main()
    {
    fun(NULL);  //输出1,c++中NULL为整数0
    fun(nullptr);//输出2,nullptr 为空指针常量。是指针类型
    }
    

    总结:在C++中(void *)不能转换为任意类型的指针,即int *p = (void *)时错误的,但int *p = nullptr 是正确的。

    参考1
    参考2

    展开全文
  • nullptr和NULL 区别

    2014-07-24 10:10:00
    注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考...1、为什要有nullptr 我们给一个指针赋初值的时候一般这么写 FILE* fp = NULL; 这里有个NULL的定义,一般情况下它是这么定义的: [cpp] #ifd...

     注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考。尊重作品作者成果,原文链接 :http://www.2cto.com/kf/201302/190008.html

     

    1、为什要有nullptr
          我们给一个指针赋初值的时候一般这么写  FILE* fp = NULL;
          这里有个NULL的定义,一般情况下它是这么定义的:
    [cpp]  
    #ifdef __cplusplus  
    #define NULL    0  
    #else  
    #define NULL    ((void *)0)  
    #endif 
          在c语言环境下,由于不存在函数重载等问题,直接将NULL定义为一个void*的指针就可以完美的解决一切问题。
          但是在c++环境下情况就变得复杂起来, 首先我们不能写这样的代码   FILE* fp = (void*)0;   将void*直接赋值给一个指针是不合法的,编译器会报错。 我们只能这样写代码
    [cpp]  
    FILE* fp = (FILE*)0;  
    // or  
    FILE* fp = 0;  
      所以在c++下面,NULL就被直接定义为一个整型 0。  在大多数情况下这并不会产生什么问题,但是万一有重载或者模板推导的时候,编译器就无法给出正确结果了。比如下面的情形:
    [cpp]  
    void call_back_process(CCObject* target, void* data);  
    bind(call_back_process, target, NULL);   // error 函数类型是void* ,但是我们绑定的是一个整型 0  
    2、 nullptr的应用场景
           如果我们的编译器是支持nullptr的话,那么我们应该直接使用nullptr来替代NULL的宏定义。正常使用过程中他们是完全等价的。
    3、模拟nullptr的实现:
          某些编译器不支持c++11的新关键字nullptr,我们也可以模拟实现一个nullptr
    [cpp]  www.2cto.com
    const  
    class nullptr_t_t  
    {  
    public:  
        template<class T>           operator T*() const {return 0;}  
        template<class C, class T>  operator T C::*() const { return 0; }  
    private:  
        void operator& () const;  
    } nullptr_t = {};  
    #undef NULL  
    #define NULL nullptr_t  

     

    转载于:https://www.cnblogs.com/junqiang-217/p/3864913.html

    展开全文
  • C++_nullptr和NULL 区别

    千次阅读 2019-02-09 13:13:46
    https://www.cnblogs.com/Philip-Tell-Truth/p/6594632.html
    展开全文
  • 1. nullptr和NULL类型区别 NULL是一个无类型的东西,而且是一个宏。0为null pointer constant的。赋予null pointer,应该是使用0,而非NULL。 nullptr是有类型的(放了在stddef头文件中),类型是 typdef decltype...

    1. nullptr和NULL类型区别

    • NULL是一个无类型的东西,而且是一个宏。0为null pointer constant的。赋予null pointer,应该是使用0,而非NULL。
    • nullptr是有类型的(放了在stddef头文件中),类型是 typdef decltype(nullptr) nullptr_t;

    2. C++中NULL使用存在的问题

    • 在c语言环境下,由于不存在函数重载等问题,直接将NULL定义为一个void*的指针就可以完美的解决一切问题。
    • 在c++环境下情况就复杂起来, 首先我们将void*直接赋值给一个指针是不合法的,编译器会报错。有重载或者模板推导的时候,编译器就无法给出正确结果。

    3. nullptr的应用:

    直接使用nullptr来替代NULL的宏定义,正常使用中它们完全等价。

    4. 模拟nullptr的实现:

    //[cpp]  www.2cto.com
    const class nullptr_t_t  
    {  
    public:  
        template<class T>           operator T*() const {return 0;}  
        template<class C, class T>  operator T C::*() const { return 0; }  
    private:  
        void operator& () const;  
    } nullptr_t = {};  
    #undef NULL  
    #define NULL nullptr_t   
    
    
    展开全文
  • nullptr和NULL区别

    2019-12-18 13:05:01
    今天同学给我科普了一波NULL和nullptr区别,在这里做个总结,分享一下 首先作为null,c++将其定义为0,但是不同的编译器对NULL和nullptr的定义可能不太相同 以vs为例: NULL更趋向被定义为0 nullptr更趋向被定义为...
  • 要区分nullptr和NULL,首先要明白NULL的含义: NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 //C语言中NULL定义 #define NULL (void*)0 //c语言中NULL为void类型的指针,但允许...
  • 要区分nullptr和NULL,首先要明白NULL的含义: NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 //C语言中NULL定义 #define NULL (void*)0 //c语言中NULL为void类型的指针,但允许...
  • 代码: # include using namespace ...NULL ...nullptr ...进入NULL的定义处 ... NULL 0LL ...从上面的输出结果来看,很明显NULL的值目前为long long类型的0值,而nullptr才是真正意义上的空指针。
  • C++11 中的指针空值nullptr和NULL区别

    千次阅读 2019-04-16 00:57:29
    C++98中的指针空值-----NULL 本质是一个宏,存在于C头文件(stddef.h)中 NULL可能被定义为字面常量0(编译器默认),或者被定义为无类型指针(void*)的常量(如果要将其按照指针方式来使用,必 须对其进行强转(void...
  • C++11新特性之nullptr和NULL区别

    千次阅读 2018-05-18 15:56:15
    看起来NULL和nullptr都是代表空指针,但是NULL在重载函数的时候却匹配到了参数为int的那个版本。  这是因为在C++中,NULL的定义一般是这样的: #ifdef __cplusplus #define NULL 0 #else #define NULL ((void...
  • nullptrNULL区别

    2019-02-01 17:41:41
    引入nullptr的原因,这个要从NULL说起。对于CC++程序员来说,一定不会对NULL感到陌生。但是CC++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。 NULL...
  • C++中nullptr和NULL

    2020-08-27 17:55:23
    C++中nullptr和NULL: 在C99里面,NULL可以被定义为0或者0L(32位和64位的区别),或者直接就是由0或者0L转成的void*。 问题: 函数重载的问题: void func(int a); void func(void *a); 对于上面两个重载的函数...
  • C++中“NULL“0”的区别是什么? 0是一个数字,本身有着一些原生的特性诸如:起始,没有,正负的分界线,0/1中的0还可以表示否定。0可以表示数字0,也可以表示ASCII码值为0的字符。 NULL用于将指针指定...
  • nullptrNULLnull和0

    2019-09-29 07:24:56
    C语言和C++对大小写是敏感的,也就是说null和NULL区别对待的。NULL代表空地址,null只是一个符号,null可以是自己定义的一个变量。 NUll是一个宏定义 #define NULL 0,容易产生宏常常产生的错误。 ...
  • null和NULLnullptr和””区别

    万次阅读 2016-04-26 12:47:11
    突然想到这个有趣的问题:C语言和C++对大小写是敏感的,也就是说null和NULL区别对待的。NULL代表空地址,null只是一个符号。
  • NULL和nullptr区别

    2019-08-15 11:41:01
    所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后还是都用nullptr替代NULL吧,而NULL就当做0使用。 原文链接:https://blog.csdn.net/qq_1...
  • null,NULL,nullptr和””区别 C和C++对大小写敏感,null和NULL区别对待的。 NULL代表空地址,null只是一个符号。 null和NULL都是字符串,具体看它们宏定义被定义成为什么值。在VS中NULL被定义为0,因为习惯上把...
  • NULL和nullptr区别

    2019-10-31 13:34:33
    在C++中,可以用NULL和nullptr来表示指针为空,其中nullptr是C++11中新引入的,主要是为了解决NULL表示空指针在C++中具有二义性的问题。 C中NULL C语言中,NULL通常被定义为:#define NULL ((void*)0) 所以NULL实际...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 218
精华内容 87
关键字:

nullptr和null区别