zoukankan      html  css  js  c++  java
  • 语法:c++对关于空指针0/NULL/nullptr三者的演变

    来源: https://blog.csdn.net/u010558281/article/details/77793644


    字面意义上的解释:

    • 0:整型常量
    • NULL:预处理符号
    • nullptr:空指针类型常量

    其中前两者在C中出现,最后一个在C++11中出现。我们平常会使用这三个符号来表示空指针,但是他们之间还是有许多差别。

    NULL 声明在cstdlib中:



      #ifdef __cplusplus
      #define NULL 0
      #else=
      #define NULL ((void *)0)
      #endif
    1
    2
    3
    4
    5

    发现在C中NULL的类型为void *,是因为C中允许NULL进行隐式转换,但是C++中不允许隐式转换,但是为了兼容C,在C++中制定一个指针为NULL的时候,实际上是将其赋值为0。

    C++支持者对C中保留的宏定义极力排除,主张在程序中尽量避免使用宏(毕竟宏可以通过const和inline内联实现更好的效果),所以C++中引入了nullptr,它是一个常量,类型为std::nullptr_t,可以转换为任意的指针类型。C++中的void*不可以转化为任意的类型,因为如果支持,在下面情况中会出现不知道调用哪个函数:

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

  • 相关阅读:
    scroll-behavior 让滚动更顺滑
    CSS3实现类似装订(缝纫)效果
    hadoop伪分布安装
    开始hadoop
    Boostrap 模态框 水平垂直居中问题
    ASP.NET MVC 下 引用阿里巴巴和IconFont字体路径404问题
    ajax 初始化请求前携带参数
    边框圆角方法
    DIV 清除样式浮动万能代码
    ASP.NET MVC 增强Convert用法+【分页2】
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326093.html
Copyright © 2011-2022 走看看