(转载)为什么 C++ 有指针了还要引用?

数据结构-线性表 线性表 1.顺序表 首先要明确顺序表并不是数组但可以用数组表示 我们用结构体来表示一个顺序表 typedef struct { int data[MaxSize]; int length; }sqList; 注意: 1.为什么要用引用类型? 是因为在函数中都是对局部变量进行操作,如果不用引用的话只是对L的复制进行操作,函数体运行结束,形参也将被释放,在函数里对顺序表的操作则毫无意义。而用引用... 阅读详情

今天师弟问我,引用的底层也是指针实现的,内置类型指针传递和引用传递的汇编代码是一样的,那C++为什么还需要引入引用呢?
好吧,仔细想了下,这确实是个好问题。
引用传递,只是明面上,没有使用值传递,值传递本身是不可避免的。
编译器,暗地里通过指针(或者其他可以替代指针的数据类型)的值传递,替换了引用传递。
所以引用传递,实质上是地址传递,别名这东西只是概念,是一种抽象,别名是没法传递的。
别名,可不是真实的数据类型。
因为,函数传递参数需要,数据复制,所以明的暗的值传递,不可避免。
引用的高效,在于对大的数据,不用直接的复制数据。

引用能实现的基本上指针都可以实现,那为什么C++还需要引入引用呢?下面看看C++之父Bjarne Stroustrup是怎么说的吧:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
真相大白,原来C++引用的引入是为了支持运算符重载。顺便提一句,既然C++引入了引用,那为什么C++不和Java一样抛弃指针呢?答:为了兼容C语言。

补充一点引用带来的好处:
用指针的使用经常犯得错:1,操作空指针,2,操作野指针,3,不知不觉改变了指针的值,而后还以为该指针正常。如果我们要正确的使用指针,我们不得不人为地保证这三个条件。而引用的提出就解决了这个问题。
引用区别于指针的特性是 :1,不存在空引用(保证不操作空指针),2,必须初始化(保证不是野指针),3,一个引用永远指向他初始化的那个对象(保证指针值不变)。人为保证变为了编译器来保证,更加安全。

用户自定义的类型最好用引用传参,这样可以避免不必要的构造函数和析构函数调用,但是对于像int,long,char一类的内置类型,按值传参会比按引用传参更高效。(https://www.tanglei.name/blog/pass-by-value-when-using-c-like-parameter-is-better-than-pass-by-referene.html)

结论:内置类型建议按值传参,用户自定义类型建议按引用参数。

参考资料:《C++语言的设计和演化(Bjarne Stroustrup著)》

C++建立单向链表链表头指针需要使用指针类型的引用参数?  struct Node {int date; Node *next;}; void CreateList(Node *&head) //引用参数是表头指针 { s=new Node; cin>>s->data; while(s->data!=0) {if(head==NULL)head=s; else p->next=s; p=s; s=new Node; cin>>s->data;} p->next-NULL; delete s; return; }函数需要修改指针的内 阅读详情

相关推荐

Redmi K30 5G刷 LineageOS17.1

前言 买手机前就观望了Xdr论坛,看Redmi K30 5G有LineageOS17.1的Rom并且还挺热,应该还不错,就入手了。晚上就刷机了。买了小米就是为了折腾,为发烧而生。 在开始前还请先安装adb工具,因为我自己是做Android开发的,自带adb,不会安装的可以百度“Android安装adb工具”。还有下载刷机文件:百度云 密码:2a0f 刷机的系统是刚买来的低版本,没有升级过Rom,如果高版本慎刷。 还有这个Rom是5G版本的,4G版本的不要刷。 建议没有刷过机器的最好不要尝试,变砖后果自负。

u010436867的博客 1万+

既然有指针了,为什么c++还要搞个引用出来?

参考文章:既然有指针了,为什么c++还搞个引用出来?

Dontla的博客 2175

Cosmos Transfer2.5多模态AI模型部署与优化实战

多模态AI技术通过融合文本、图像、代码等不同模态数据,实现跨模态理解与生成。其核心原理基于Transformer架构的注意力机制,结合对比学习实现模态对齐。这类技术在智能内容创作、跨模态搜索等领域具有重要价值,尤其适合电商营销图文生成、UI设计转代码等场景。Cosmos Transfer2.5作为先进的多模态模型,支持8192 tokens长文本窗口和混合模态输入,实测推理速度达17.5 samples/s(T4显卡)。部署时需注意FlashAttention优化可提升3倍长文本处理效率,8-bit量化则能

weixin_29038303的博客 280

既然有指针了,为什么 C++ 还搞个引用出来?

对象是指一块能存储数据并具有某种类型的内存空间;一个对象a,它有值和地址&a,运行程序时,计算机会为该对象分配存储空间,来存储该对象的值,我们通过该对象的地址,来访问存储空间中的值;指针:它保存一个值(或 null)的地址,可以检索指向该地址处的值。指针定义时,可以不用初始化;指针可以初始化为NULL,指针的在初始化后, 其地址值仍可以改变, 用于存储另外一个地址;指针p也是对象,它同样有地址&p和存储的值p,只不过,p存储的数据类型是数据的地址。

kaszxc的博客 368

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7583

KUKA机器人 - 从开机到自动运行

注1:本文仅代表本人对机器人使用的一些建议,在使用机器人前,还请详细阅读库卡机器人官方资料,道路千万条,安全第一条!!! 注2:技术有限,欢迎各位大大在阅读过程中发现各类问题,并且批评指正!!! 目录 一、准备工作 1. 机器人上电完成 2. 电脑安装Workvisual 二、学习手动移动机器人 三、项目配置 1. 设置机器人IP地址 2.电脑和机器人通过网线连接 3.查找并打开项目 4. 通讯配置 5. 项目上传 6. 检验IO配置 四、编程 1.新建程序 2. 程序...

yilunyao的博客 1万+

【验证测试】为什么有了指针还需要引用?

【验证测试】为什么有了指针还需要引用?

challenglistic的博客 544

VisualSFM+MeshLab 三维重建全过程记录

VisualSFM+MeshLab 三维重建全过程记录,从下载到运行出结果,以及其中一些可能出现的小问题。通过这两个软件熟悉一下多目立体视觉重建的流程。

何似莫相逢 3万+

【转载】C/C++引用和指针

【转载】C/C++引用和指针 原文地址:https://www.cnblogs.com/gxcdream/p/4805612.html 为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针。不止C/C++使用指针。 每一种编程语言都使用指针。C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了。 “Everything uses pointers. C++ just exposes them rather than hiding them,” It’s easie

xf652638的博客 392

YOLOv11改进策略【卷积层】| TIP 2025 MFA 多阶段特征聚合 大核扩感受 + 多梯度融合,强效增强弱小目标特征

红外弱小目标尺寸极小、信噪比低,在特征传递中极易丢失信息;常规卷积感受野单一、梯度源不足,难以同时捕捉局部细节与全局上下文,导致小目标特征表达弱、检测漏检。因此提出多阶段特征聚合 MFA,用大核卷积+多分支+通道注意力强化小目标特征提取。

Limiiiing的博客 581

30. 用GPT-4自动生成测试用例的完整流程

利用GPT - 4生成测试用例面临的主要问题包括:如何准确地将软件需求转化为GPT - 4能够理解的输入提示,以确保生成的测试用例覆盖所有关键功能;如何评估生成的测试用例的有效性和充分性;如何处理生成的测试用例中的错误或不合理之处;以及如何将生成的测试用例集成到现有的测试框架中。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 472

C++中引用和指针的区别【转载】

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义: 引用-...

574

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

【转载】C++中引用和指针的区别

下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。见下图,所示引用的含义: 2、指针和引用的区别 首...

勤学如春起之苗,不见其增,日有所长! 辍学如磨刀之石,不见其损,日有所亏! 145

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++指针传递和引用传递的区别 (转载整理)

区别1:指针传递和引用传递是以不同的方式实现相同的效果,但是指针传递的本质还是值传递,只是传递的值是地址。 就拿 交换两个数的函数来举例: // 指针传递 void swap(int * val1, int * val2) { int temp; temp = *val1; *val1 = *val2; *val2 = temp; }...

aiqianqi1796的博客 5009

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【转载】java中的引用和C++中的指针的区别

1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。 2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。 3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,...

113

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++中的指针与引用 --转载

C++中的指针与引用 2010-09-22 02:32 by 吴秦, 3512 visits, 收藏, 编辑 写在前面 指针和引用形式上很好区别,但是他们似乎有相同的功能,都能够直接引用对象,对其进行直接的操作。但是什么时候使用指针?什么时候使用引用呢?这两者很容易混淆,在此我详细介绍一下指针和引用,力争将最真实的一面展现给大家。如果我喷得不够好,希望嘴下留情、手下留命,还请指点

简单 & 执着 839

指针与java引用的区别_【转载】java中的引用和C++中的指针的区别

1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一...

weixin_35894622的博客 250

[转载] C语言C++指针与java中引用的一点对此

参考链接: C/C++指针与Java引用 在C语言或者C++中,我们定义一个整型数组的时候,如下所示 int a[5]; 上面一条语句定义了一个包含5个整型元素的数组,a是一个指针,指向了所定义数组的第一个元素,即a[0],此时,如果定义int *p = a,则定义了一个指针变量,该指针同样指向数组的第一个元素a[0],int b = a[0],则变量b是a[0]的一个引用,(*p)某种意义上也是a[0]的一个引用。 在JAVA中,如果定义了一个类Dog,实例化该类的对象的...

u013946150的博客 99

C++中的指针与引用(转载)

C++中的指针与引用 2010-09-22 02:32 by 吴秦, 16229 阅读, 23 评论, 收藏, 编辑 写在前面 指针和引用形式上很好区别,但是他们似乎有相同的功能,都能够直接引用对象,对其进行直接的操作。但是什么时候使用指针?什么时候使用引用呢?这两者很容易混淆,在此我详细介绍一下指针和引用,力争将最真实的一面展现给大家。如果我喷得不够好,希望嘴下留情、手下留命,还请

gaoxin12345679的专栏 592

(转载)C++指针的指针和指针的引用

C++指针的指针和指针的引用:原文https://www.cnblogs.com/li-peng/p/4116349.html

TY20141117的博客 184

【转载】C++引用详解及与指针异同点

很多人对于引用和指针的区别与联系很纠结(包括我在内O(∩_∩)O哈哈~),最近看到一篇关于引用和指针区别和联系的文章,感觉茅塞顿开,在这里和大家分享下~

fmflb的博客 325

指针 c和java 引用_[转载] C语言C++指针与java中引用的一点对此

参考链接: C/C++指针与Java引用在C语言或者C++中,我们定义一个整型数组的时候,如下所示int a[5];上面一条语句定义了一个包含5个整型元素的数组,a是一个指针,指向了所定义数组的第一个元素,即a[0],此时,如果定义int *p = a,则定义了一个指针变量,该指针同样指向数组的第一个元素a[0],int b = a[0],则变量b是a[0]的一个引用,(*p)某种意义上也是a[0...

weixin_35181005的博客 130

c++ 指针和引用的区别(转载)

面试经常会问的一个问题 不知道是不是很多点都能答上来呢?   从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。 在C

fffanpei的专栏 469
上一篇: c++:全局变量、静态变量的静态初始化与动态初始化
下一篇: (转载)c++的常量折叠与const常量
杂质想当杂志
博客等级 码龄10年 13粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值