C++下的引用类型

30天(一个月)挑战C++ 精选教程 PDF 30天(一个月)挑战C++ 精选教程 PDF 30天(一个月)挑战C++ 精选教程 PDF 立即下载

        引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。

        引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &test;),这里我们就定义了一个int类型的名为test 的引用,但是int &test;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test=变量名;)。

#include <iostream> 
using namespace std; 
 
void main(void) 
{ 
 
int a=10; 
int &test=a; 
test=test+2; 
 
cout << &a << "|" << &test << "|" << a << "|" <<test << endl; 
 
cin.get(); 
}

  观察并编译运行上面的代码你会发现&a和&test的地址显示是相同的,a和test的值显示也是一样的! 

  const修饰如果用在引用上会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的下面我们来看一个例子:

#include <iostream> 
using namespace std; 
 
void main(void) 
{ 
 
int a=10; 
//double &test = a + 1.2f; //这句就是错误的! 
const double &test = a + 1.2f; 
 
cout << &a << "|" << &test << "|" << a << "|" <<test << endl; 
 
cin.get(); 
}

  上面的代码足够说明问题了,这就是const修饰带来的好处,但是聪明的人会在输出的时候发现一个问题,就是a和test的值的输出不同,按照最先说的道理应该可以改变a的值呀,为什么在这里却有没有能够改变呢?

  道理是这样的,const修饰过后的引用在编译器内部是这样进行变化的。

int a=10; 
const double &test = a + 1.2f;

  这样的一段代码在编译器认为却是下面的方式进行的

int a=10; 
int temp = a; 
const double &test = temp + 12.f

  这里其实是把a的值赋给了一个临时temp 变量,而后test获得的却是temp+12.f 改变的是temp而不是a,所以就出现了a和test显示的值不同的情况,这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么!

别再手动写JSON了!用Node-RED OPC UA节点5分钟搞定楼宇温湿度数据采集 本文介绍了如何利用Node-RED和OPC UA节点快速实现楼宇温湿度数据的自动化采集与JSON格式转换。通过可视化工具Node-RED,开发者无需编写复杂代码,5分钟内即可完成从传感器到数据输出的全流程配置,大幅提升智慧楼宇和工业物联网项目的实施效率。 阅读详情

相关推荐

告别命令行恐惧!用nTopology可视化工具5分钟搞定三维Voronoi泡沫建模

本文介绍如何利用nTopology可视化工具快速生成三维Voronoi泡沫结构,无需编程即可完成复杂建模。Voronoi结构在轻量化设计、能量吸收和生物医学等领域具有重要应用,传统命令行方法门槛较高。通过nTopology的四步流程,用户可在5分钟内创建仿真就绪模型,大幅提升设计效率。

weixin_30764771的博客 426

【C++编程语言】之引用

​ 作用:函数传参时,可以利用引用的技术让形参修饰实参。​ 在函数形参列表中,可以加const修饰形参,作用:常量引用主要用来修饰形参,防止误操作。​ 2.引用在初始化后,不可以改变。​ 优点:可以简化指针修改实参。​ 1.不要返回局部变量的引用。​ 2.函数的调用可以作为左值。​ 1.引用必须初始化。...

kaszxc的博客 341

5分钟搞定!用Keil MDK将STM32F103C8T6工程无缝迁移到ZET6开发板

本文详细介绍了如何在Keil MDK环境下快速将STM32F103C8T6工程迁移到ZET6开发板,涵盖硬件差异对比、工程配置调整、外设适配及编译排错等关键步骤,帮助开发者5分钟内完成工程移植,大幅提升开发效率。

weixin_30879169的博客 408

引用做函数返回值的注意事项(C++)

1、不要返回局部变量的引用 #include <iostream> using namespace std; //返回值类型“ int & ”即返回的是一个int类型的变量的别名 int& test() { int a=10;//a为局部变量,存放在四区中的栈区 return a; } int main() { //返回a的别名存放在变量ref中 int &ref=test(); //输出ref cout <&lt

Ivan_47的博客 831

从零到一:手把手教你用HFSS仿真60GHz圆极化磁电偶极子天线(附参数调优心得)

本文详细介绍了在HFSS中设计60GHz圆极化磁电偶极子天线的全流程,包括仿真环境搭建、参数化建模、收敛性优化和性能验证。通过系统化的参数扫描和优化策略,显著提升了天线的轴比带宽和增益性能,为毫米波通信应用提供了高效的天线设计解决方案。

weixin_42614269的博客 311

有限差分法地震数据正演模拟(二)

正演模拟,是在地球物理勘探研究中,根据地质体的形状、产状和物性数据,通过构造数学模型计算得到其理论值(数学模拟),或通过构造实体模型来观测模型所产生的地球物理效应的数值(物理模拟)。p(t+1,x,z)即为下一时刻的波长信息,该波动方程的意义就是通过前一时刻(p(t-1,x,z))和现在时刻(p(t,x,z))预测下一时刻波的传播情况。声波波动方程:反应声波的传播规律,描述最简单的波现象的方程,p代表波场信息,v表示速度场信息因为速度只与速度场有关,所以只与x,z有关。其结果也可以作为反演的验证。

weixin_46285501的博客 3936

关于c语言中有关函数形参int test(int * &b)的理解

关于c语言中有关函数形参int test(int * &b)的理解 今天上网课的时候看到有个类似这样的函数,当时头脑都蒙了,我没见过这样的东西,然后就在网上搜,但是看的稀里糊涂,一直想到晚上十点多,我感觉有点灵感了。一下是结论 当我们使用int * b这样做形参,b这个指针变量会在被调函数中创建存储空间,而且当这个函数被调用时,实参会将它里面保存的地址复制给形参,那么b与实参都会同时指向...

qq_19203209的博客 1745

AD7920实战:从咪头到ADC的音频信号采集电路设计全解析(附电路图)

本文详细解析了基于AD7920 ADC芯片的音频信号采集电路设计全流程。从驻极体咪头的驱动、AD8542运放的两级增益与偏置设计,到关键的抗混叠滤波器配置,以及ADC接口的驱动缓冲与PCB布局要点,提供了完整的实战指南与电路图,帮助开发者实现高质量音频信号采集。

red88的博客 802

C++语法(十一)引用

引用即给变量起别名,初始化如下: int a = 10; int &b = a; 1、改变引用的值,变量也会改变值。 2、引用必须要初始化,不能仅仅声明。 3、引用一旦初始化后就不能再改变,它的本质是指针常量。比如b已是a的引用,就不能改成c的引用了。 要把赋值操作和更改引用区分开。 int &b = a; // 实际上是 int* const b = &a; 4、在函数中的引用传递 void swap1(int *a, int *b){ int tem.

Hillbox 297

YOLOv11改进策略【损失函数篇】| arXiv2025 TeLU双曲正切指数线性单元 强梯度防消失 + 解析光滑稳训练,极速提升收敛与泛化

本文记录的是。TeLU(Hyperbolic Tangent Exponential Linear Unit)通过。本文利用TeLU激活函数,以x⋅tanhex统一实现正区间强梯度加速收敛与负区间持续梯度避免死神经元,全程保持解析光滑与极低计算开销,,显著提升深度网络在分类、检测、分割、时序任务中的收敛速度、精度与泛化鲁棒性。

Limiiiing的博客 224

网络安全系列-四十三:使用Suricata分析恶意流量pcap文件

本文基于[网络安全系列-三十六:使用Suricata IDS分析pcap文件]和 [网络安全系列-四十二: Suricata之rulesets的激活、更新及动态加载]的基础上,使用suricata针对包含恶意流量的pcap文件进行分析,触发事件告警,并对suricata输出的日志进行逐个分析,让你掌握针对恶意流量的分析步骤,及怎么查看suricata输出的日志。

penriver的博客 2885

C++ 的引用类型

C++ 的引用类型 在翻旧文的时候,发现这么一篇文章:关于一道C++笔试题的纠结,学计算机的伤不起啊。当时可能是觉得 Placement new 的语法1比较新鲜,所以印象比较深刻。现在则是觉得那篇文章中的笔试题挺有水准的,于是记一篇文章,特别说明这一问题——C++ 的引用类型。 C++ 的类型默认是值类型 C++ 的 class 默认是值类型的。我们常常会从内存布局的角度来看待一...

anjiao62582的博客 288

代谢组数据分析(二十四):基于tidymass包从质谱原始数据到代谢物注释结果的实践指南

本教程介绍了如何使用 R 语言中的 tidymass 包进行代谢组学数据分析。tidymass 是一个专为液相色谱-质谱(LC-MS)数据设计的开源工具,提供从数据准备到统计分析的全流程支持。教程详细讲解了数据准备、数据处理、数据探索、数据清洗、代谢物注释、统计分析及结果输出的步骤。用户需准备 MS1、MS2 数据和样本信息表,并通过 tidymass 进行峰识别、峰分组、保留时间校正等操作。数据处理后,用户可进行数据探索、清洗和代谢物注释,最终通过统计分析发现潜在的生物标志物,并输出结果。教程还提供了代码

专注生信领域 1635

【数据结构基础】C++中的引用类型

在以严蔚敏老师的《数据结构》为代表的诸多**数据结构**的书中,都出现了C++引用这一用法,所以在学习**数据结构**的过程中,有必要认识一下C++语言中的这一用法。

weixin_65334260的博客 2666

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

C++引用类型黑技术

C/C++语言以它的目标程序质量接近汇编代码而受到专业程序员的喜爱。真编译、本地代码、高质量、高效率,代码运行速度极快。语法简洁,使用灵活,的确是一种优秀的编程语言。 一、为什么引入引用类型 C/C++的另一特点是完备的指针类型,指针(Pointer)的本质其实就是单元的地址,若当初翻译成接地气的“地址类型”更合适。指针可以灵活操纵各种类型,但一些人滥用指针而钻起了牛角尖。C语言的函数只有传值调用,没有传址参数,用指针可以间接实现,但不直观、方便或带来错误,所以,C++引入“引用”类型(Referenc

yihuliunian的博客 215

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

浅谈C++引用类型

转自:微点阅读https://www.weidianyuedu.com/content/1417208263557.html C/C++语言以它的目标程序质量接近汇编代码而受到专业程序员的喜爱。真编译、本地代码、高质量、高效率,代码运行速度极快。语法简洁,使用灵活,的确是一种优秀的编程语言。 一、为什么引入引用类型 C/C++的另一特点是完备的指针类型,指针(Pointer)的本质其实就是单元的地址,若当初翻译成接地气的“地址类型”更合适。指针可以灵活操纵各种类型,但一些人滥用指针而钻起了牛角..

ysds20211402的博客 471

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ 引用类型

引用的定义:引用称为别名(alias),它用作对象的另一个名字。 通过引用我们间接地操纵对象,使用方式类似于指针。但是不需要指针的语法在实际的程序中引用主要被用作函数的形式参数——通常将类对象传递给一个函数。 引用类型由类型标识符和一个取地址操作符来定义引用必须被初始化 例如: 虽然引用也可以被用作一种指针,但是像对指针那样用一个对象的地址初始化引用却是错误的,可以定义一个指针引用 例如: 一...

weixin_44548643的博客 886

C++的函数重载和引用类型

本文介绍了C++中的函数重载和引用类型,并对为什么C++支持函数重载而C不支持的问题以及引用和指针类型在const修饰下权限变更问题进行了深入剖析

tianxhiliangtadi的博客 930

C++杂记:引用类型

引用类型是C++11标准中新增的一种复合类型,作用是为对象起了另外一个名字。 //引用i变量,起名为j int i = 0; int &amp;j = i; //这样也可以 int i = 0, &amp;j = i; *需要注意的是 1.引用类型在定义时必须进行初始化 int &amp;j;//错误 2.引用的类型和初始化的类型必须严格匹配 double i = 0.0; in...

Belous的博客 932

C++ STL容器中不能存储引用类型的原因

C++ STL容器中不能存储引用类型的原因 在正式说明问题之前,先介绍一个概念:在 C++ 中,不能声明或定义指向引用的指针。 那为什么不能定义指向引用的指针呢?原因如下: 从设计目的上来讲,设计引用的目的是为了简化指针操作,避免指针造成的一系列问题,如果对引用再取地址的话,有违背设计初衷之意。 从实现角度来讲,引用常常为指针常量,对指针常量取地址(指向指针常量的二重指针)本身便没有意义。C/C++ 中定义二重指针往往是要对一重指针进行修改,而指针常量本身就不能修改,且倘若要访问引用所指变量的地址或

qq_38988226的博客 3479

VS2017学习C++基础十三(返回引用类型)

1.不要返回局部变量的引用 // chapter13a03返回引用类型.cpp : //函数返回引用类型; //1.不要返回局部变量的引用 #include <iostream> using namespace std; int & sum()//返回引用类型的函数 { int num = 10; int& rNum = num; //注意:rNum是在sum()函数中定义的,是局部变量 //rNum的生存期只在sum函数中 //函数中的局部变量会被内存回收

qq_951274168的博客 296

C++函数的返回值——返回引用类型&非引用类型

函数的返回主要分为以下几种情况: 1、主函数main的返回值: 允许主函数main没有返回值就可结束;可将主函数main返回的值视为状态指示器,返回0表示程序运行成功,其他大部分返回值则表示失败。 2

linjcai的博客 856
上一篇: C++中布尔类型
下一篇: C++中的const限定修饰符
Aaron25
博客等级 码龄22年 20粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值