Reference vs Pointer

2023-10-30

参考自Dan Saks的文章

An Introduction to References

References and const

The key insights

I believe the key insight into why C++ has reference types as well as pointer types is that reference types enable overloaded operators to look like built-in operators, as well as act like them.

Pointers can do almost everything that references can do, but they can lead to expressions that don't look right. On the other hand, references have some restrictions that make them less convenient than pointers for implementing algorithms and data structures. References reduce, but do not eliminate, the need for pointers.

As a general rule, use references in function parameters and return types to define attractive interfaces. Use pointers to implement algorithms and data structures.

Samples:

1) int *x[n]            //[] has higher precedence than*.

    It means that x is an "array withN elements of type pointer"

2) char *f(int)      //() has the same precedence as [].

    It means that f is a function returning a pointer to achar.

3) char (*f)(int)   

    It means that f is a pointer to a function returning achar.

4) char &g(int)

    It means that g is a function returning a reference to achar.

5) char (&g)(int)

    It means that g is a reference to a function returning a char.

6) const int &ri = i  is equivalent toint const &ri = i

    因为reference天生就是const所以只有指向常量的引用而没有常量引用的说法。

    int &const rj = j; // error

7) int const *p = &i               //pointer toconst

8) int *const q = &j               //const pointer

 

假设有对象定义:
MyObjectType obj1;

1. 值传递:
如果函数定义为:
void myFunction( MyObjectType obj);

函数调用:
myFunction(obj); //函数以外对象obj的值不会 改变

2. reference传递:
如果函数定义为:
void myFunction( MyObjectType &obj);

函数调用:
myFunction(obj); //函数以外对象obj的值 改变

3. 指针传递:
如果函数定义为:
void myFunction( MyObjectType *obj);

函数调用:
myFunction(&obj); //需要dereference(&), 函数以外对象obj的值 改变

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Reference vs Pointer 的相关文章

  • Linux_note 命令grep,sed,awk

    1 grep 过滤出指定的行 grep cinvABC 39 word 39 filename color 把匹配到的关键词用红色标识 如 xff1a grep color 39 root 39 etc passwd c xff1a 打印符
  • linux note

    目录 快捷键 符号含义 系统目录颜色 系统根目录含义 ls al cd set env export source exec 快捷键 打开终端的快捷键的为 Ctrl 43 Alt 43 T 关闭终端的快捷键为 Ctrl 43 D 符号含义
  • 群晖note station client 闪退(Mac OS Monterey)

    问题 xff1a 升级后如题 解决 xff1a 下载官方Bug 修正版 xff0c 覆盖安装 xff01 ftp Synology RackStation 出处 xff1a Note Station Client not working o
  • C,C++,C#note

    1 c 43 43 中的类的定义和声明可以都写在头文件中 xff0c 然后cpp文件include头文件 xff1b 也可以声明在头文件 xff0c 定义在cpp文件 xff1b 或者所有声明和定义都放在cpp文件 xff1b 混写定义与声
  • [深度学习]note for Machine Learning: An Algorithmic Perspective, Second Edition(Ch04-Ch06)【日常更新】

    Machine Learning An Algorithmic Perspective Second Edition Part 2 4 多层感知器4 1 前向4 1 1 偏置 4 2 后向 xff1a 误差的反向传播4 2 1 多层感知器算
  • SAP有用的NOTE(持续更新)

    目录 2421240 Portal is not loaded on Chrome 56 or higher 66971 Supported SAP GUI platforms 66971 Supported SAP GUI platfor
  • BackgroundWorker

    BackgroundWorker的事件响应函数 private void backgroundWorker1 DoWork object sender DoWorkEventArgs e BackgroundWorker worker se
  • 美国的有线电视节目提供商

    HBO HBO电视网 英文名 Home Box Office 是总部位于美国纽约的有线电视网络媒体公司 HBO电视网于1972年开播 全天候播出电影 音乐 纪录片 体育赛事等娱乐节目 与绝大多数电视频道不同的是 它不卖广告 经过22年的发展
  • Reference vs Pointer

    参考自Dan Saks的文章 An Introduction to References References and const The key insights I believe the key insight into why C
  • Spring_Accepting request input

    Spring MVC provides several ways that a client can pass data into a controller s handler method These include 1 Query pa
  • python_error

    inspection info This inspection detects code which can not be normally reached 检验信息 本次检验检测到正常情况下无法达到的代码 inspection info
  • Into Clause VS Let Clause

    1 Into Clause 用来将select join 或者group的结果存储到一个临时变量中 目的 在之后的查询中需要使用此结果 例如 var developersGroupedByLanguage from d in develop
  • Ubuntu 使用笔记

    更新时间 2020 3 24 文章目录 一 安装 二 快捷键 三 常用命令 3 1 软件安装 3 2 程序编写 四 软件使用 1 终端使用 2 Vim编辑器 3 Linuxqq 4 基于wine 的软件下载 5 CAJViewer使用 6
  • Java springboot自定义bean加载控制顺序在flyway执行后

    在springboot中 我们经常需要在系统启动时执行一些自定义逻辑 例如将数据库中的值读取给bean使用等等 一般采用自定义bean的初始化流程方式实现 方式有许多种 但假如这个bean要被其他模块使用时保证已经被初始化过 就不能简单的采
  • Spring DataBinding

    1 用 ModelAttribute注释方法 1 1 ModelAttribute和 RequestMapping同时注释一个方法 span style font size 14px RequestMapping method Reques
  • Using LocalDB with Full IIS

    使用了LocalDB的ASP NET程序在部署到IIS时会报错 修改步骤如下 1 setProfileEnvironment需设置为true This requires editing applicationHost config file
  • 程序记录(一)VGG16猫狗分类

    import torch from torchvision import datasets models transforms import os from torch utils data import DataLoader from t
  • 「学习笔记」torchvision.datasets.MNIST 参数解读/中文使用手册

    DataLoader使用手册 参数解读 PyTorch torch utils data DataLoader 中文使用手册 官方手册如下 torchvision datasets MNIST root train True transfo
  • Association Class VS Full Class

    详细分析请见 http etutorials org Programming UML Chapter 6 Class Diagrams Advanced Concepts Association Class 1 关联类的必要性 关联类隔离了
  • ADC 读取电位器旋钮,用回差消除临界值档位跳动

    就是比如 用电位器当旋钮做风扇调速 划分出10 个速度档位 对应10 个ADC 转换结果的阈值 如果直接比较阈值 当旋钮拧到临近阈值的地方时 ADC 结果的微小跳动会导致风扇档位在两个级别之间不停左右横跳 因此想到了利用回差来消除抖动 回差

随机推荐

  • c# .net 微软证书_微软透露C#9.0计划

    c net 微软证书 微软正在努力开发C 9 0 这是对该公司的类型安全的 面向对象的语言的升级 它将包括诸如记录和基于值的平等之类的新功能 C 9 0将成为 NET 5开发平台的一部分 该平台将于11月发布 C 8 0于去年9月发布 C
  • imagemagick使用_使用ImageMagick将图像转换为灰度

    imagemagick使用 A few years ago I bought a DSLR camera with a bunch of filter effects built in and it s been worth every p
  • PyEMD库的安装和导入EMD, Visualisation问题[已解决]

    1 安装问题 直接pip安装可能会报错 error Microsoft Visual C 14 0 or greater is required 有两种方法可以解决 按照提示下载Microsoft C Build Tools并安装 官方下载
  • html网页自动提示框代码,多种网页弹出窗口代码

    经常上网的朋友可能到过这样一些网站 一进入首页立刻会弹出 一个窗口 或者按一个链接或按钮弹出 通常在这个窗口里会显示 一些注意事项 版权信息 警告 欢迎光顾之类的话或者作者想要 特别提示的信息 其实制作这样的页面非常容易 只要往该页面的 H
  • 对于第一阶段学习的总结

    阶段总结 杨芳芳 第一阶段的学习就到此结束了 在这一段时间中 学到了很多以前没有接触过的知识 让我对java有了很大的了解 并且能够自己编写一些小程序了 下面就是我对于在这段期间的学习情况的总结 由于我是开课后从UI转进JAVA来的 刚进来
  • 天翼云登录破解js逆向

    网站 https m ctyun cn wap main auth login redirect 2Fmy 账号 234555551 qq com 密码 fffffffffff 666 抓包分析一下 密码直接加在url后面进行请求 打个xh
  • 阐述篇-聊聊我眼中の《面试宝典》

    相信或许很多人是因为通过搜索面试宝典的文档点进来的 你或许正在忙碌找工作 你或许想在跳槽之前把能量池蓄满 if dev HR 或许你可以花5min看完 求职篇 面试多家公司却总是电话通知 why 面试感觉聊的很好 就是迟迟没有电话 why
  • 游戏开发unity UGUI知识系列:判断是否点击在UI对象上

    EventSystem current IsPointerOverGameObject 检测点击是否在ui上 通常可以用来方便判断是否点击在屏幕上 用来进行镜头左右上下的角度的调整前的判断 需要注意的是 使用EventSystem时 场景里
  • 物理地址 = 段地址*10H + 偏移地址

    程序如何执行 CPU先找到程序在内存中的入口地址 地址总线 8086有20根地址总线 每一根可以某一时传0或1 20位的二进制数字可以表示的不同的数字的个数是2 20 1048576 1048576 byte 1024 1024 KB 注
  • ffmpeg将webm格式转换成mp4

    ffmpeg将webm格式转换成mp4 起因 转换成HEVC编码 H 265 转换成AVC编码 h 264 起因 手头有一部4K风景视频 辛辛苦苦从油管上下载下来 想要用wallpaper engine做成壁纸 却发现格式是webm vp9
  • MAC地址表

    MAC地址表实验 动态AMC地址 通过源mac地址表学习
  • C语言程序设计经典例题----海伦公式求三角形面积

    海伦公式 又译作希伦公式 海龙公式 希罗公式 海伦 秦九韶公式 它是利用三角形的三条边的边长直接求三角形面积的公式 表达式为 S p p a p b p c 以下是这个程序的成功和失败示例 这个程序利用到判断以及求值两个部分 因此我们可以利
  • 树的遍历(概念与习题)

    树的遍历概念 首先我们观察三种遍历方式对根 左 右结点的遍历顺序 先序的遍历顺序 根 左 右 中序的遍历顺序 左 根 右 后序的遍历顺序 左 右 根 遍历顺序可以理解为 优先级 先序遍历举例 若一个节点有左子树和右子树 那它下一步将会先走向
  • SSM框架整合静态资源自动加请求前缀

    静态资源自动加请求前缀 当如js文件在jsp中被引入时 可能请求转发到该页面会js文件报404错误 这是因为js文件路径在项目名与js文件名之间自动加上了请求路径的父级路径 解决方案 在jsp页面顶部以及head标签中加入Java脚本代码如
  • 【小结】从输入URL到页面显示发生了什么?(二)渲染

    本文总结从输入URL到页面显示的第二部分内容 渲染 从拿到HTML资源到显示的过程 主要过程 构建DOM树 样式计算 分成三步 把 CSS 转换为浏览器能够理解的结构 styleSheets 转换样式表中的属性值 使其标准化 计算出 DOM
  • yuv图解(YUV444,YUV422,YUV420,YV12,NV12,NV21)

    参考文章 图解YUV YUV是什么 YUV 444 422 420 And YUV Packed Planar Semi Planar 知识点 YUV是用一个称为Y 相当于灰度 的亮度分量和两个色度分量表示 分别称为U 蓝色投影 和V 红色
  • Cgroups----限制kvm虚拟机

    Cgroups 限制kvm虚拟机 Cgroups相关概念及其关系 相关概念 1 任务 task 在cgroups中 任务就是系统的一个进程 2 控制族群 control group 控制族群就是一组按照某种标准划分的进程 Cgroups中的
  • 查看mysql版本的六种方法

    1 root localhost mysql V 2 root localhost mysql help grep Distrib 在mysql下有四种 3 登陆时会显示 4 mysql gt status 5 mysql gt selec
  • 中阳:ChatGPT横空出世,或迎来“安卓时刻”

    ChatGPT横空出世 写代码 写情书 写文章 做题 它啥都会 会被人工智能替代的行业 由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在各大中外媒体平台掀起了一阵狂热之风 继 AI 绘画之后 由 OpenAI 上线的 C
  • Reference vs Pointer

    参考自Dan Saks的文章 An Introduction to References References and const The key insights I believe the key insight into why C