【C++】5. 引用

UE5 C++软引用 软引用通常有FSoftObjectPath、FSoftClassPath、TSoftObjectPtr、TSoftClassPtr。它指向的资源未被加载,仅仅是提供了一个路径,通过路径找到我们的资源。一.软引用通常是仅储存资源对象的资源路径没有与资源产生耦合关系的引用(软引用加载到内存中,只有在需要的时候才会被加载)1.FSoftObjectPath保存对象的路径字符串,通过字符串找到所对应的资源(侧重于描述某一类资源,比如:静态模型、动态模型、数据表格等。二.这些引用都可以在编辑上,选择资源。 阅读详情


前言

C语言中什么最难学?那当然就是指针了。不但使用起来麻烦,时不时还会产生一些意料之外的错误。C++提供了一种方式,能做到指针的作用,但比指针用起来更容易。这种方式称为引用。


一、引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。我们叫铁牛,黑旋风都是指李逵。

1.1 理解引用

首先我们看看如何使用引用:

类型& 引用变量名(对象名) = 引用实体
在这里插入图片描述

引用不是新定义一个变量,而是给已存在变量取了一个别名看了这个例子,我想你应该能深刻理解这句话了。
在这里插入图片描述
不难看出,引用比指针方便了不少。不用麻烦的去写取地址,解引用。


1.2 引用的特性

虽然引用很好用,但使用方式不对,那也没用。

  1. 引用必须初始化
    在这里插入图片描述

  2. 一个实体可以有多个引用,但一个引用只能指向一个实体,且不能改变。
    在这里插入图片描述
    当然不是,c = b;是将b的值赋给c,而c又是a的引用(别名),即将b的值赋给a

  3. 引用的对象可以是变量、常量……,使用时注意引用类型必须和引用实体是同种类型
    (这里会涉及到引用的权限,后文有讲)
    在这里插入图片描述


1.3 引用的权限

上面提到引用的对象可以是常量,那可以写出这样的代码
int& a = 10;但很遗憾,这样写是错的。const int& a = 10;这样写才对。
要搞明白为什么,需要我们知晓引用的权限。

首先,我们要了解权限是什么?看下面代码
int a = 10;
int& b = a;
b能改变a吗?当然可以,b = 11;a就变为11,此时的b相当于我们使用电脑时,以管理员的方式运行,权限很大。它可以读写a,影响到a。这就是引用b的权限。
回到上面的问题,为什么必须写成const int& a = 10;?因为10是常量,常量不能改变。如果写成int& a = 10,这不就和刚才的b一样吗,表式a有能力改变10,但10是常量,不能改变。因此我们不能给a能够改变10的权限,即a只能读,不能写,所以我们需要加上const。

了解权限是什么,下面我们来学习如何正确给与权限。

引用过程,权限不能增大,只能平移或缩小。

在这里插入图片描述

有两种特殊情况,如下

  1. 类型转换时,权限变化
    在这里插入图片描述

在发生类型转换时,会产生临时变量,临时变量具有常性(相当于加了const), 如下

在这里插入图片描述
同理,const int& c = a;c是临时变量的引用,权限为只读。

小知识:c为临时变量的引用,那临时变量用完销毁后,c会这么办?答案是临时变量不会立马销毁,对于类似于int& c = a;这样的引用初始化,编译器会将其实现为一个指针,并在需要时进行隐式解引用。所以,即使原始对象离开了作用域,只要其引用仍然存在,临时变量也会与引用一起存在,直到引用失效。换句话说,临时变量的生命周期是由其所绑定的引用决定的,而不是由其作用域决定的。


函数返回值,放回值会放在临时变量里,临时变量具有常性。

在这里插入图片描述

既然函数返回值也是通过临时变量来传递的,那如果用引用接收该怎么写?
如下:
在这里插入图片描述


1.4 引用的使用场景

1.4.1 做参数

  1. 输出型参数
    我们在力扣上使用c语言刷题时,常常出现这么一个参数int* returnSize,这里的returnSize就是输出型参数。即能够将值带回的参数。
    在这里插入图片描述

  1. 提高效率
    函数传值调用:函数形参是函数实参的临时拷贝,如果函数实参过大,形参也就很大。所以实参过大时,一般都是传址调用。引用相当于传址调用,因此能节省效率。

1.4.2 做返回值

上面提到函数返回值会被放在临时变量里。那如果返回的对象数据量很大呢?那么临时变量就会很大,这就很低效了。那我们怎么做?返回它的引用。
在这里插入图片描述

当函数的返回引用时,不会创建临时变量。

因此返回引用能够提高效率——吗?
之前我们提到,如果临时变量用引用来接收,会延长临时变量的作用域,所以引用能指向正确的空间(临时变量的地址)。但现在函数返回引用是不会创建临时变量,那引用指向哪块空间呢?
在这里插入图片描述
问题来了,如下:
在这里插入图片描述
但为什么打印的结果会是19呢?而且并没有报错。
因此这取决于编译器,我使用的是VS2022。根据结果可以推断,VS2022并没有清理函数栈帧,也没有禁止这种非法访问。
在这里插入图片描述

因此这样使用引用,不但不能提高效率,反倒有很大可能出现bug。
那用引用做返回值岂不是没什么用?

返回全局变量、静态变量、堆区上的空间的引用就可以了。
这些空间不会在函数调用结束后释放。


1.5 引用的本质

在这里插入图片描述

其实引用就是通过指针来实现。我们说引用不开辟空间,是从语法层面来说的,从底层来看,引用就是指针,会开辟空间。
因此,在C++中,我们可以将引用视为一种语法上的简洁方式来处理指针的语义。


【C++深度剖析学习总结】 5 C++中引用的本质 – 作者 Allen 转载请注明出处 微信公众号「炫色Allen」(微信号:Allen5G) c++是强类型的语言,类型来不得一点含糊 7-1:函数重载 vs 函数指针 #include <stdio.h> #include <string.h> int func(int x) { return x; } int func(int a, int b) {... 阅读详情

相关推荐

apm软件仿真+QGC地面站 环境搭建

本教程使用场景:apm软件仿真运行于虚拟机 ubuntu环境。qgc地面站位于windows 系统。两个环境在同一台电脑上。 一.apm仿真环境搭建 1.安装vm虚拟机及ubuntu 18。 2.ubuntu下 下载Ardupilot 飞控源码 并配置环境。 下载源码: git clone https://github.com/ArduPilot/ardupilot cd ardupilot git submodule update --init --recursive 配置所需运行的环境:

qthello 6110

临时变量的引用和常量引用(类型转换造成临时变量的生成)

常量引用是不能修改所引用的值的,但是初始化的时候其所引用的对象并不一定非要是一个常量对象,因为常量引用的目的是确保不会通过这个引用变量来修改你所引用的值,但是并不代表这个值不能通过其他方式进行修改,比如可以通过他本身进行修改 #include <iostream> using namespace std; void test01() { int a = 10; const int& b = a; //b = 2;//报错,常量引用不能修改 a = 13;//可以自己修改自己的值

diaoergiao的博客 1131

STM32H750实战:用TIM+DMA驱动ADC/DAC实现音频回环(附CubeMX配置避坑指南)

本文详细介绍了在STM32H750上构建高保真、低延迟音频链路的实战方法。通过配置TIM定时器作为硬件节拍器,精准触发ADC采集与DAC播放,并利用DMA实现数据的自动搬运,全程无需CPU干预。文章重点剖析了CubeMX配置中的关键步骤与常见“坑点”,如ADC的Conversion Data Management模式选择、DMA的FIFO与Burst模式配置,以及STM32H7系列必须开启ADC全局中断等,并提供了完整的代码实现与调试验证指南。

1057

C++中颇为厉害的引用

一、引用的概念 通俗的讲:引用就是一个变量的别名 阿狗 在家被叫狗蛋,在外被叫张苟一。 阿狗就是变量的名字,狗蛋和张苟一就是引用。 用代码去解释: 类型& 引用变量名(对象名) = 引用实体 int main() { int a = 0; int& b = a; return 0; } b 就是 a 的别名,b是引用。 所以 b的地址和a的地址是一样的,因为他们就是同一个变量。 二、引用的特性: 1、引用在定义时必须初始化 ❌ ✔ ...

想让你搞懂的博客 395

STK新手必看:用700km轨道卫星,5步搞定对地覆盖分析报告

本文为STK新手提供700km轨道卫星对地覆盖分析的5步实操指南,涵盖卫星创建、传感器配置、区域定义、计算设置及报告生成全流程,特别标注常见操作误区与优化技巧,帮助用户快速掌握STK覆盖性分析核心方法。

weixin_42546392的博客 375

OpenBCI脑电实验避坑指南:如何用Python准确捕捉P300信号

本文详细介绍了使用OpenBCI和Python进行P300脑电信号实验的避坑指南,包括电极贴放、信号采集、信号处理和数据分析等关键步骤。通过实战经验和代码示例,帮助研究者避开常见陷阱,提高P300信号捕捉的准确率,适用于脑机接口和神经科学研究。

weixin_30316097的博客 551

【C++系列】引用与临时变量

引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它 引用的变量共用同一块内存空间。 说人话就是,引用就是取小名,平常说的二狗子啥的都是小名。 就比如这个人,他的伙伴喜欢亲切地叫他绿藻头,当然也可以直接叫他索隆,但无论是叫他绿藻头还是索隆,叫的都是这个人,两种称呼,一个身体。引用也是这样的,在语法上,虽然称呼不同,但是它们都是指同一块内存空间 我们来观察一下这一段代码 #include<iostream> using namespace

DaiLan_的博客 1243

薛定谔 | 先导化合物优化与相互作用可视化

当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件)

药研猿的博客 2144

C/C++ 引用用作函数参数,属性,临时变量,引用参数和const

按值传递导致被调用函数使用调用程序的值的拷贝。但是在swapv()中,变量a和b是复制了wallet1和wallet2的值的新变量,因此交换了a和b的值并不会影响wallet1和wallet2的值。如果将上面类似的参数传递给接受引用参数的函数,将会发现,传递引用的限制更严格,毕竟,如果ra是一个变量的别名,则实参应该是该变量。Tips:如果函数调用的参数不是左值或与相应的const引用参数的类型不匹配,则C++将创建类型正确的匿名变量,将函数调用的参数的值传递给该匿名变量,并让参数来引用该变量。

WWester的博客 564

SCSA,scCATCH,SciBet,SingleR 四种注释方法比较

以下是和四种细胞类型注释方法的详细对比,从。

qq_40256654的博客 1215

AI应用质量工程实践:从评估到监控的完整体系构建

在软件工程领域,质量保障体系是确保产品稳定可靠的核心机制,涉及度量指标、保障流程和工具链的完整闭环。随着生成式AI应用的快速发展,如何将传统软件工程中的质量门禁思想引入AI领域,成为工程实践的关键挑战。其核心原理在于构建可量化、可监控、可改进的质量评估框架,通过自动化测试、持续监控和反馈优化来管理AI输出的不确定性。这一技术价值在于将AI应用从原型阶段推向产品化,确保输出的一致性、安全性和可靠性。在实际应用场景中,开发者需要从功能性、非功能性、一致性和合规性四个维度构建评估体系,并借助LLM-as-a-Ju

weixin_28728279的博客 294

PLC系统中临时变量和静态变量的区别与用法

  在实际项目中,我们经常用到TEMP (临时变量)和STAT(静态变量),下面我们一起来看看两者的用法与区别。一起来看。   TEMP (临时变量):暂时保存在局部数据堆栈中的变量。同一级POU的临时变量使用局部数据堆栈中的同一块物理存储区,类似于公用的布告栏,谁都可以往上面贴布告,后贴的布告将原来的布告覆盖掉。每次调用POU之后,不再保存它的临时变量的值。每次调用FC和FB时,首先应初始化它的临时变量(写入数值),然后再使用它,简称为先赋值后使用。   STAT(静态变量):保存在背景数据块

1万+

【x265编码器】章节1——x265的lookahead模块分析

目录一、模块功能二、lookahead模块分析1.调用流程2.代码分析Lookahead::addPicture()Lookahead::checkLookaheadQueue()Lookahead::getDecidedPicture()Lookahead::findJob()Lookahead::slicetypeDecide()PreLookaheadGroup::processTasksLookaheadTLD::lowresIntraEstimate()Lookahead::slicetypeAn

vcvdv123的博客 4万+

鸿蒙5.0实战案例:基于HAR的跨模块C++头文件引用

多个模块使用同一份C++代码是App开发中很常见的问题,比如多个模块使用同一个自研的加解密库、集成三方开源SO库暴露其中的C++代码等。注意事项:双冒号前面指的是srcHar/oh-package.json5配置中的name,双冒号后面跟着的是步骤2中srcHar中对外导出的的so库名称,名称必须要一致。4、 在desHar的CMakeLists.txt声明so库的依赖。5、在desHar的cpp源码中使用 srcHar提供的C++方法。1、将需要导出的C++头文件放至srcHar模块下的固定目录。

Maniu_666的博客 509

visio安装包

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

cpp(5)引用

引用://引用就是别名,下面mum是num的别名,这两个变量是一个变量,只不过名字不同而已#include&lt;iostream&gt;using namespace std;int main(){ int num; int &amp;mum=num;   //定义num的别名mum num=999; cout&lt;&lt;"mum:"&lt;&lt;mum&lt;&lt;endl; cout...

哲学天空的博客 923

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

鸿蒙开发5.0案例分析:基于HAR的跨模块C++头文件引用

多个模块使用同一份C++代码是App开发中很常见的问题,比如多个模块使用同一个自研的加解密库、集成三方开源SO库暴露其中的C++代码等。注意事项:双冒号前面指的是srcHar/oh-package.json5配置中的name,双冒号后面跟着的是步骤2中srcHar中对外导出的的so库名称,名称必须要一致。2、在srcHar模块的build-profile.json5中配置C++头文件的目录。5、在desHar的cpp源码中使用 srcHar提供的C++方法。场景:模块A引用模块B的C++接口。

2501_91726121的博客 427

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Cpp真经5---引用的本质,指针的引用,常量引用

引用的本质 引用的本质是常指针 C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占的空间大小与指针相同。 由编译器内部实现,用户不可见 ref = 100l; //ref是引用 ---> *ref=100; int a=10; int& aRef = a; //自动转化为 int* const aRef = &a; 因为指针常量必须要初始化,所以引用也必须初始化,而且引用的对象也无法更改 aRef = 20l //内部发现aRef是引用,自动转化为: *aRe

weixin_43604927的博客 483

[C++系列] 5. C++引用

赫赫有名的“黑旋风”,原名李逵,在“及时雨”宋江大哥面前,也只能算作“铁牛”了。 1. 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 语法为:类型&amp; 引用变量名(对象名)=引用实体 void Test() { int a = 10; int &amp;ra = a; // 定义引用...

Y-puyu 的博客 622

5.C++的引用

1.在常引用中,权限可以平移,缩小,但是不能放大。

m0_56227851的博客 340

C++ 对引用的理解5

常量引用 int main() { // int &m = 10; // 错误, 引用必须引一块合法的内存空间(什么是合法的内存空间, 这个10在程序中有内存吗?) const int &m = 10; //加入const后,语法就通过了,编译器优化,类似 int temp=10; const int &m = temp; // 可以通过指针来修改 cons...

weixin_43903378的博客 148

5、C++ 引用

1 引用0 变量名变量名实质上是一段连续存储空间的别名,是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用内存空间1 引用是C++的概念,属于c++编译器对c的拓展2 引用概念a)在c++中新增加了引用的概念 b)引用可以看做一个已定义变量的别名 c)引用的语法: Type&name =var; d)引用做函数参数声明时不进行初始化引用做函数参数 1、普通

ann9_com的专栏 347

5 C++ 引用说明

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。注意:引用类型必须和引用实体是同种类型的。

hunandede的博客 434

【C++】 5_引用的本质

引用的意义 引用作为变量别名而存在,因此在一些场合可以替代指针 引用相对于指针来说具有更好的可读性和实用性 swap 函数实现对比: void swap_1(int& a, int& b) { int t = a; a = b; b = t; } void swap_2(int* a, int...

weixin_34061482的博客 78

【C++】5.引用的本质分析

引用的意义 引用作为变量的别名而存在,因此在一些场合中可以代替指针 引用相对于指针来说更具有更好的可读性和实用性 swap 函数的对比 // 指针版本 void swap(int *a, int *b) { int t = *a; *a = *b; *b = t } // 引用版本(注意:函数中的引用行参不需要进行初始化!!!) void swap(int&...

zhabin0607的博客 188

C++万能引用与引用折叠:5个常见编译错误场景与解决方案

本文深入探讨了C++11中的万能引用与引用折叠特性,分析了5个常见编译错误场景及其解决方案。通过具体代码示例,帮助开发者正确区分万能引用与右值引用,理解引用折叠规则,避免std::forward误用,并掌握完美转发中的类型推导技巧,提升模板编程效率。

weixin_33816946的博客 354
上一篇: 【C++】4. 重载函数
下一篇: 【C++】6. 内联函数
ProcedureStone
博客等级 码龄4年 254粉丝 64原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值