zoukankan      html  css  js  c++  java
  • (转)c++中NULL与nullptr的区别

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

    nullptr是c++11中的关键字,表示空指针

    要区分nullptr和NULL,首先要明白NULL的含义:

    NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0

    //C语言中NULL定义
    #define NULL (void*)0                //c语言中NULL为void类型的指针,但允许将NULL定义为0
    
    //c++中NULL的定义
    #ifndef NULL
    #ifdef _cpluscplus                       //用于判定是c++类型还是c类型,详情看上一篇blog
    #define NULL 0                         //c++中将NULL定义为整数0
    #else
    #define NULL ((void*)0)             //c语言中NULL为void类型的指针
    #endif
    #endif
    

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

    然后理解nullptr:

    nullptr是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。

    在c++中(void *)不能转化为任意类型的指针,即 int p=(void)是错误的,但int *p=nullptr是正确的,原因

    对于函数重载:若c++中 (void *)支持任意类型转换,函数重载时将出现问题下列代码中fun(NULL)将不能判断调用哪个函数

    void fun(int i){cout<<"1";};
    void fun(char *p){cout<<"2";};
    int main()
    {
    fun(NULL);  //输出1,c++中NULL为整数0
    fun(nullptr);//输出2,nullptr 为空指针常量。是指针类型
    }
    
  • 相关阅读:
    鼠标移上与移出事件
    最小高度 最大高度
    鼠标移上改变光标
    设置圆角
    iframe 子窗口获取父窗口元素 父窗口获取子窗口元素
    parent
    禁用滚动条
    mysql--user表
    mysql客户端连不上数据库
    linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/10499314.html
Copyright © 2011-2022 走看看