常量引用

C++引用(变量引用、数组引用与数组指针、引用本质-指针常量、常量引用) 文章目录1 引用的基本用法2 引用注意事项3 引用做函数参数4 引用做函数返回值5 引用的本质6 常量引用 1 引用的基本用法 作用:为变量起别名。 语法:数据类型 &别名 = 原名; 示例: int main() { int a = 5; int &b = a; //引用:为变量起别名 cout << "a = " << a << endl; //5 cout << "b = " << b << endl; 阅读详情
如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作。对常量的引用可以用其它任何引用来初始化;但不能改变。

关于引用的初始化有两点值得注意:

(1)当初始化值是一个左值(可以取得地址)时,没有任何问题;

(2)当初始化值不是一个左值时,则只能对一个const T&(常量引用)赋值。而且这个赋值是有一个过程的:

首先将值隐式转换到类型T,然后将这个转换结果存放在一个临时对象里,最后用这个临时对象来初始化这个引用变量。

例子:

double& dr = 1; // 错误:需要左值

const double& cdr = 1; // ok


第二句实际的过程如下:

double temp = double(1);

const double& cdr = temp;



作函数参数时:
// bc_temp_objects_not_bound_to_nonconst_ref.cpp
// compile with: /EHsc
#include "iostream"
using namespace std;
class C {};
void f(C & c) { cout << "C&" << endl; }
void f(C const & c) { cout << "C const &" << endl; }
int main() {
   f(C());
}

结果:
C const &
更直接的,用基本类型:
#include <iostream>
using namespace std;
void display(int const &ref) {cout<<ref<<'\n';}
int main()
{
  int i=1;
  display(i);
  int const anotheri=2;
  display(anotheri);
  display(2);
  display(1+2);
  display(static_cast<int>(3.14159));
}

通过常量引用从函数返回一个局部对象:
一般从一个函数返回一个局部对象的引用是不对的:
T   &   my_op   (   void   )  
  {  
      T   t;  
      return   t;  
  }   //   The   T   object   t   got   destroyed   here   so   the   returned   reference   is   not   valid   anymore.

特殊情况:返回一个常引用
const   T   &   my_op   (   void   )  
  {  
      T   t;  
      return   t;  
  }

const   T  &  my_t_obj   =   my_op   ();   

 在这个情况下,局部变量   t   不会被直接析构,而是会保留到   my_t_obj   的生命周期结束为止。

总之,常量引用语法上可以引用一个临时变量。这种方法在使用引用作函数参数和返回局部变量时有意义。
我目前看来常量引用主要用在作函数参数或保证不修改原变量的时候。
一些参考:
http://topic.youkuaiyun.com/u/20080123/13/33c140ff-e213-417c-9d13-e672de4d9939.html
http://msdn.microsoft.com/zh-cn/library/cfbk5ddc.aspx
http://topic.youkuaiyun.com/t/20050209/18/3780754.html
 
C++ 指针常量、常量指针、指向指针常量的引用等 文章目录指针常量、常量指针、指向指针常量的引用等指针常量与常量指针 指针常量、常量指针、指向指针常量的引用等 指针常量与常量指针 ###指针常量(辅助记忆,“指针是常量”) ... 阅读详情

相关推荐

const常量引用的使用方法

C++编程语言中,对于常量的引用是一个非常重要的应用技巧。在这篇文章中,我们将会为大家详细介绍一下有关C++常量引用的相关应用方法,相信大家可以从中学到很多知识。 C++单例模式基础内容详解C++创建Web服务相关方法剖析C++构造函数如何进行初始化C++标识符命名规则相关应用技巧分享C++函数模板基本概念讲述 如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的

鱼思故渊的专栏 4779

C++ 常量引用用法详解

“常量引用”其实是“对 const 的引用”的简称。 顾名思义,它把它所指向的对象看作是常量(不一定是常量),因此不可以通过该引用来修改它所指向的对象的值。 严格来说,并不存在常量引用,因为引用不是一个对象,所以我们没法让引用本身恒定不变。事实上,由于 C++ 语言并不允许随意改变引用所绑定的对象,所以从这层意思上理解所有的引用又都算是常量。 与普通引用不同的是,“常量引用”(对 const 的引用)不能被用作修改它所绑定的对象。 (1)指向 const 变量时,一定要使用“常量引用”,而不能是一般的引用。

W24的博客 1万+

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文提供了一份详细的Simulink仿真指南,手把手教你从零开始搭建交流异步电机矢量控制模型。内容涵盖主电路搭建、坐标变换实现、双闭环PI调节器设计、转子磁链观测器调试等核心步骤,并附有完整的仿真文件,帮助读者跨越理论到实践的鸿沟,掌握高性能电机控制系统的建模与仿真技能。

pz890123的博客 665

C++学习日记——引用、引用作为函数参数、常量引用

作为函数的参数,将引用变量作为参数,将直接使用其数据,而不是其副本(拷贝)2、可以引用const和非const数据,否则只能引用非const数据。普通变量属于可修改的左值,const修饰的值属于不可修改的左值。语法:typename &ref =valname;非左值,字面常量,包含多项的表达式等。1、引用必须引用合法的内存空间。3、引用一旦初始化,不能改变引用。例如:int num=10;非常量引用的值必须为左值,可以被引用的数据对象。引用和引用作为函数参数。引用和引用作为函数参数。

不说二话的自家人的博客 1527

ksz9031 mmd读取不了_ZYNQ. LwIP.PHY.KSZ9031RNX

新一块板子米尔科技的z-turn 使用的PHY芯片是Micrel的 KSZ9031RNX 而不是zedboard上的Marvell的。直接使用lwip的echo server demo时会报错 , 无法启动。在网上找了很久终于找到几篇关于这个问题的文章。修改PHY的驱动xemacpsif_physpeed.c文件该芯片的PHY Identifier 是 0x0022bsp设置中修改参数以提速MEM...

weixin_39626298的博客 924

OSMDroid(1)——OSM简介,基础例子搭建

1.OSMDroid简介 Osmdroid是一款完全开源的地图基本操作SDK,相比于现在普遍使用的百度地图,高德地图,谷歌地图等最大的好处就是开源。 最近在做一个军方项目,要求完全不能联网,从开发到应用整个阶段都是在局域网进行,相比之下采用了OSMDroid这个SDK作为解决方案。 先来看OSMDroid,便是(OpenStreetMapForAndroid),后面都简称OSM...

robotskly的博客 6179

C++引用(常量引用、左值引用和右值引用)

引用为对象起了另外一个名字,引用类型为引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名: 一般在初始化变量的时候,初始值会被拷贝到新建的对象中。然而定义引用的时候,程序把引用和它的初始值**绑定(bind)**在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。引用即别名引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字定义了一个引用之后,对其进行的所有操作都是在与之

m0_69251699的博客 710

SpringCloud2025+SpringBoot3.5.0动态路由503问题排查与负载均衡依赖解析

本文详细排查了SpringCloud 2025与SpringBoot 3.5.0环境下,Spring Cloud Gateway动态路由返回503错误的根本原因。核心问题在于新版网关未默认集成负载均衡器,导致无法解析lb://服务名。通过对比静态路由与动态路由,定位到需显式引入spring-cloud-starter-loadbalancer依赖,并提供了完整的解决方案与最佳实践配置。

s3t4u的博客 504

嵌入式软件工程师面经C/C++篇—C++ 常量指针、指针常量、常量引用:一篇搞懂

本文深入解析了C++中const与指针、引用的组合用法。核心要点包括:1)常量指针(const int* p)- 指向内容不可改但指针可变;2)指针常量(int* const p)- 指针地址固定但内容可改;3)常量引用(const int& r)- 引用内容不可改且可绑定字面值。文章强调const修饰对象取决于其位置,并指出不存在"引用常量"概念,因为引用本质就是不可改指向的。通过代码示例和记忆技巧,帮助读者区分这些易混淆概念,并介绍了实际应用场景。

qq_59174845的博客 907

苏州大学自动化考研842自动控制原理:手把手教你用胡寿松《自控》高效备考(附复试电工/电子/微机原理攻略)

本文详细解析苏州大学自动化考研842自动控制原理备考策略,以胡寿松《自动控制原理》为核心教材,提供三阶段高效学习路径和实战技巧。重点涵盖频域分析、根轨迹绘制等高频考点,并针对机电、光电、轨道三个学院的复试科目(电工电子技术、电子技术基础、微机原理与接口技术)给出差异化备考方案,助力考生全面提升笔试和面试表现。

weixin_42638178的博客 399

网络系统管理专栏-配套练习+知识点详解

网络系统管理专栏-配套练习+知识点详解

bfq05234214的博客 682

c++常量引用

使用引用而非常量引用极大的限制了函数所能接受的实参的类型.因为我们不能把const对象字面值或者需要类型转换的对象传递给普通的引用形参.1、这种错误绝不像看起来这么简单,它可能造成出人意料的结果.例如我们定义函数声明:string::size_type find_char(string &s,char c,string::size_type &occurs);则只能将find_char函数作用于st

夜夜夜夜 2186

【DEIM创新改进】全网独家创新、注意力改进篇 | AAAI 2026 | DEIM 引入轻量级群体注意力(LWGA)模块,可以显著提高其多尺度物体检测能力,特别是在小物体和复杂背景下的表现

本文提出了一种改进的DEIM网络模型,通过引入轻量级LWGA模块显著提升了多尺度物体检测性能。LWGA模块采用局部和全局注意力机制,有效提升了小物体和复杂背景下的识别能力,同时保持低计算成本。该模块通过分割输入特征图并应用多种注意力机制(GPA、RLA、SMA、SGA)进行特征提取和融合,优化了多尺度物体的特征表示。实验表明,改进后的DEIM模型在遥感图像处理等任务中表现出色,在12个数据集上实现了性能与计算效率的最佳平衡,为资源受限设备提供了高效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 273

C++ 辨析常量指针、指针常量与常量引用、引用常量

1.常量指针与指针常量的区分 A、常量指针(const int* p) 常量指针本质上是一个指针,是一个指向“常量”的指针,即不能通过指针改变指向对象的值(不能解除引用),但可以更改指向。用法如下 int a=3,b=4; const int *p=&a; /初始化指向a p=&b; /可以更改指向,现在指向b *p=5; /不可以通过指针改变对象的值 B、指针常量(int* const p) 指针常量本质上是一个常量,const是修饰p的,即指针的值自身是一个常量,不可改变,始

weixin_43335392的博客 3174

[PCIe5.0] 5.3.1.4.2 D3Cold State

主电源(Vcc)完全断开,仅保留极少量辅助电源(Vaux)用于维持基本唤醒功能设备功能完全关闭,所有寄存器状态丢失(除非有特殊存储)需要完全重新初始化才能恢复工作比D3Hot状态功耗更低,但唤醒延迟更长。

系统固件工程师 452

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

引用、常指针、常引用、指针常量、引用常量

引用的本质以及const的位置在语法和作用上的区别

Gift-Isla 7170

visio安装包

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

C++中常量、引用、指针、常量指针、指针常量、常量引用、顶层常量与底层常量

主要问题 哪个是指针不能变? 哪个是指针指向的对象不能变? 常量 常量const是constant的缩写,本意是不变的,不易改变的意思。const在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。 加了const修饰的变量,一经定义值永远不能改变。通常我们用在一些定值的声明定义上,比如某缓冲区的大小、某个最大值最小值等等。 const float MaxLenth = 100.0f; 如果你试图在声明定义以外的范围内修改该变量的值,是不被允许的,通常编译器就会检查出错误。 举

呆呆象呆呆的博客 1182

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

形参中使用常量引用,常量,普通引用的区别

C++中的引用,给我们提供了一种区别于C指针的形参定义方式。一般我们可以将其定义为 1)普通引用 void foo(int &n); 2)常量 void foo(const int n); 3)常量引用 void foo(const int& n); 三种方法用途不一样,都可以通过编译。 以普通引用为形参的函数,一般会更改实参的值,比如increment(int &...

学习记录本 6645

C++ Primer:常量引用、引用常量、常量指针、指针常量

常量引用:绑定常量的引用。 const int ci = 1; const int &r = ci; r = 2;//错误,r不可修改 引用常量:不存在引用常量的说法。 int i = 1; int &const r = i;//错误 3. 常量指针:指向常量的指针。 const int i = 1; const int *p1; int const *p2;//...

北冥有鱼wyh的博客 1578

常量函数、常量引用参数、常量引用返回值[C++]

 http://www.cnblogs.com/jcsu/articles/1045801.html 1. 关于常量引用正像在C语言中使用指针一样,C++中通常使用引用 有一个函数... foo()并且这个函数返回一个引用...... & foo()...., 一个指向位图(Bitmap)的引用 ...Bitmap & foo().... 并且这个位图(bitmap)是常量const Bi

pocketmatrix的专栏 692

指针常量,常量指针,常量引用,引用常量,指针数组,数组指针,引用数组,数组引用的梳理

C++中的声明 *1.指针常量: int * const p 2.常量指针: int const p (const int p) 3.引用常量:int& cosnt rp (合法,但是多余) 4.常量引用:int const &rp(const int& p) 5.指针数组:int*pa[] 6.数组指针:int (pa)[] 7.引用(的)数组:int& ra...

qq_37306425的博客 359

常量引用 和非常量引用 左值和右值

左值和右值的本质区别在于内存地址和生命周期。左值是有明确地址、可修改的持久对象;右值则是临时、不可修改的短生命周期表达式结果。当const引用绑定右值时,编译器会创建临时变量存储右值值,并延长其生命周期。const修饰控制的是访问权限而非类型,权限只能缩小不能放大:非常量引用只能接受左值,而常量引用可接受左右值。理解引用类型时需结合const修饰位置,如const char* const&表示对常量指针的引用。字符串字面量等右值会引发临时变量创建,其引用类型需匹配临时变量的const属性。

加油! 1069

对于常量引用的理解

引言 今天在刷剑指offer的时候,被常量引用的问题困惑了很久,记个笔记记录下来以防自己遗忘。 常量 在理解常量引用之前,先回顾一下常量的概念,常量是指变量值在程序执行期间不会改变的变量。 引用 引用的概念简单说就是为我们开辟的内存空间取个别名,通过引用我们可以改变引用所指向内存空间中的值。引用的好处是可以节省内存空间。 #include "pch.h" #include <iostream...

weixin_42304632的博客 728

常量引用 对const的引用 用const修饰的引用 引用const量

“常量引用”是“对const的引用”(对常量的引用)的简称;引用的对象是非常量还是常量可以决定其所能参与的操作; 对const量的引用只能用const修饰的引用,但变量(非const量)也可绑定到const修饰的引用,这时,不可通过引用改变变量的值,可通过变量改变const的值; 一个常量引用(int)绑定到另一个类型(double)的量上时,绑定的是编译器生成的临时量(一个由double量强制转...

weixin_42119324的博客 883

常量引用的意义,对常量引用进行修改

其实,常量引用在绑定时,绑定的并不是对象本身,而是一个临时量/右值/临时空间,然后这块临时空间进行强制类型转换成常量引用的类型,再与其绑定,这么一看,好像也没有打破引用的规范,因为类型依然是一致的,只是像很多c++语法一样,有一些我们看不到的隐性操作。c++ primer 对常量引用的讲解非常好,首先常量引用本身只是一个简称,因为引用并不是一个变量,所以根本不存在常量的引用,而只是对const的引用,当然,如果熟知就好。可以保存一个禁止任何人修改,代码层面又和预编译一样方便修改,常量引用真的不能被修改?

deligent_torche的博客 606

【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

一、普通引用 1、概念说明 2、代码示例 - 普通引用 二、常量引用 1、常量引用引入 2、常量引用概念与语法 2、代码示例 - 常量引用不可修改

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1156
上一篇: TCP的几个状态 SYN, FIN, ACK, PSH, RST, URG
下一篇: C语言函数内部改变指针本身
seadplus
博客等级 码龄15年 57粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值