zoukankan      html  css  js  c++  java
  • C++中nullptr和NULL

    转自:https://www.cnblogs.com/mrlsx/p/5510496.html

    1.NULL为0值,nullptr是指针对象

    NULL是一个宏定义,c中NULL为(void*)0,而c++中NULL为整数0:

    //C语言中NULL定义
    #define NULL (void*)0 
    
    //c++中将NULL定义为整数0
    #define NULL 0 

    在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针,见下例:

        int *p=0;//指向空指针
        cout<<(p==NULL);
    
    #输出:1
    
        int *p=NULL;
        cout<<(p==NULL);
    #输出:1
    
    #以上两个结果可以看出,NULL在定义指针时是和0等价的。
    
        int *p=nullptr;
        cout<<(p==NULL);
    #输出:1

    但是下面的重载会出现问题

    void fun(int i){cout<<"1";};
    void fun(char *p){cout<<"2";};
    int main()
    {
    fun(NULL);  
    fun(nullptr);
    }
    #报错: error: call of overloaded 'fun(NULL)' is ambiguous
    #如果注释掉这一句的话,是可以正常输出2的

    上面的实验说明了NULL既可以转换为int也可以*,而nullptr只能转化为任意类型的指针*。

  • 相关阅读:
    11.22
    python之字典(dict)
    Version Control
    java_实现一个类只能声明一个对象
    javase-位运算符
    javase-整数变量的交换
    URI和URL的关系与区别
    http解析
    函数式语言
    MyIASM和Innodb引擎详解
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13897757.html
Copyright © 2011-2022 走看看