• 引用和指针的一些细节


    引用和指针是C++中易于混淆的概念。

    这里从基础概念说起:指针p是对象,和普通变量一样有地址(&p)和值(p),而值p存储的数据类型是数据的地址,以此达到指向其他变量的目的。(访问指向的值用解引用操作符“ * ”)。

    而指针有常量指针和指向常量的指针之分,常量指针既是不可改变值的指针(也就是不改变指向的变量),指向常量的指针(也叫指针常量)不能改变(指针指向的)对象的值。


    而引用(reference)可以理解为变量的别名,比方说小明,他的小名(别名)叫明明,那么“明明”就是引用。

    引用相较于指针,有一些特性:

    [1]指针可以为空(null),而引用不行,引用一定义就必须要初始化(绑定对象)。

    [2]引用类似于常量指针,不可改变值,一旦绑定就不可再重新和其他对象绑定(而不是拷贝)在一起了。(就好像“明明”只能是小明的小名,不能是其他人的小名)。

    而[1]的特性也就决定了:拿到一个引用的时候,不用判断非空;而拿到指针的时候,为了稳健和安全,通常需要判断指针空与否。

    那么为什么要引入引用呢?

    这里贴一个Stroustrup的FAQ:

    Why does C++ have both pointers and references?

    C++ inherited pointers from C, so I couldn't remove them without causing serious compatibility problems. References are useful for several things, but the direct reason I introduced them in C++ was to support operator overloading

    很明显了,指针是从c继承下来的,防止出现兼容性问题,而引用有很多用处,但主要用处是为了操作符重载。

    原来人类的悲欢并不相通, 我只觉得他们吵闹。
  • 相关阅读:
    超级好用的装机神器——Ventoy
    CentOS7.4安装Nvidia Tesla T4驱动
    ESXI常用命令
    阿里云|腾讯云MySQL备份文件一键恢复工具
    在甲方做三年安全的碎碎念
    golang操作docker
    Nginx Module扩展模块实现
    炒冷饭之ThinkPHP3.2.X RCE漏洞分析
    Windows:sysprep.exe工具:审核模式 VS OOBE模式(工厂模式 VS 用户模式)
    高校毕业生人数增长图
  • 原文地址:https://www.cnblogs.com/zhlabcd/p/11274195.html
Copyright © 2020-2023  润新知