news 2026/6/15 17:05:13

04. 引用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
04. 引用

1.引用的基本定义与核心特性

2.引用的常见用法

3.引用 vs 指针


1.引用的基本定义与核心特性

c++中引用是变量的"别名",就像一个人有本名和外号,引用和原变量指向同一块内存地址,操作引用就等同于操作原变量1).语法格式// 语法:类型& 引用名 = 原变量名;inta=10;int&ra=a;// ra是变量a的引用(别名)"&是引用标识符, 必须和类型写在一起"
2).核心特性 a.必须初始化 声明引用时,必须绑定到一个已存在的变量,不能"悬空"b.不可改绑 初始化后,引用永远指向最初绑定的变量,无法切换指向 c.引用无独立内存,引用本身不占用额外内存,只是变量的别名;不能引用NULL,必须绑定有效变量,不像指针可以指向NULL

2.引用的常见用法

1).基础用法:操作引用=操作原变量#include <iostream>usingnamespacestd;intmain(){intnum=100;int&ref_num=num;// 定义num的引用// 操作引用,原变量也会变ref_num+=50;cout<<"num = "<<num<<endl;// 输出:num = 150cout<<"ref_num = "<<ref_num<<endl;// 输出:ref_num = 150cout<<"&num = "<<&num<<endl;// 输出num的地址cout<<"&ref_num = "<<&ref_num<<endl;// 输出和num相同的地址return0;}

2).引用作为函数参数 核心优势:避免值传递的拷贝开销(尤其对大对象,如类、数组),同时比指针更简洁、安全(无需解引用*)
#include <iostream>usingnamespacestd;// 1. 值传递:拷贝新变量,修改不影响原变量voidchangeByValue(intx){x=200;}// 2. 指针传递:修改原变量,但需要解引用,语法稍繁琐voidchangeByPointer(int*x){*x=200;}// 3. 引用传递:修改原变量,语法简洁,无拷贝voidchangeByReference(int&x){x=200;}intmain(){inta=100;changeByValue(a);cout<<"值传递后:"<<a<<endl;// 输出:100(无变化)changeByPointer(&a);cout<<"指针传递后:"<<a<<endl;// 输出:200(有变化)a=100;// 重置changeByReference(a);cout<<"引用传递后:"<<a<<endl;// 输出:200(有变化)return0;}

3).常引用(const引用):"只读的别名, 如果不想通过引用修改原变量, 可以用const修饰引用"a.禁止通过常引用修改原变量(原变量本身仍可修改)b.可以绑定常量、临时值(普通引用不行)
#include <iostream>usingnamespacestd;intmain(){inta=100;constint&const_ref=a;// 常引用,只读// const_ref = 200; // 错误!常引用不能修改原变量a=200;// 允许:原变量本身可改,const_ref会同步变化cout<<const_ref<<endl;// 输出:200// 常引用可以绑定临时值(普通引用不行)constint&temp_ref=10+20;cout<<temp_ref<<endl;// 输出:30return0;}

4).引用作为函数返回值 注意:"绝对不能返回局部变量的引用(局部变量在函数结束后销毁, 引用会悬空, 导致未定义行为)"正确用法:返回全局变量、静态变量或类成员的引用(生命周期长的变量)
#include <iostream>usingnamespacestd;// 全局变量(生命周期贯穿程序)intglobal_num=100;// 返回全局变量的引用int&getGlobalNum(){returnglobal_num;}// 错误示例:返回局部变量的引用(禁止!)int&getLocalNum(){intlocal_num=200;returnlocal_num;// 函数结束后local_num销毁,引用悬空}intmain(){// 正确用法:通过返回的引用修改全局变量getGlobalNum()=300;cout<<global_num<<endl;// 输出:300return0;}

3.引用 vs 指针

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:16:44

YOLOv11魔改高效涨点 | 注意力篇 | CAA:上下文锚点注意力机制,条形卷积 + 全局先验,低成本实现 360 度全局视野,轻量化捕捉超大感受野,即插即用,彻底疯狂!!!

1、模块介绍 1.1 论文信息 论文标题:Poly Kernel Inception Network for Remote Sensing Detection 中文标题:用于遥感检测的多核 Inception 网络 (PKINet) 论文链接 论文代码 核心创新点模块:Poly Kernel Inception (PKI) 模块与上下文锚点注意力 (Context Anchor Attenti…

作者头像 李华
网站建设 2026/6/10 0:35:03

SSM278的考研互助辅导平台vue

目录 SSM278考研互助辅导平台Vue实现摘要 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; SSM278考研互助辅导平台Vue实现摘要 SSM278考研互助辅导平台基于Vue.js框架开发&#xff0c;整合Spring、Spring MVC和MyBatis&#x…

作者头像 李华
网站建设 2026/6/15 13:15:12

SSM279的课程思政元素收集系统 加入课程

目录SSM279课程思政元素收集系统摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM279课程思政元素收集系统摘要 SSM279课程思政元素收集系统旨在将思想政治教育与专业课程内容深度融合&#xff0c;通过系统化、数字化的方…

作者头像 李华
网站建设 2026/6/15 12:18:26

SSM294的农产品进销存管理vue

目录SSM294农产品进销存管理系统的Vue实现摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM294农产品进销存管理系统的Vue实现摘要 该系统基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;后端框架与Vue.js前端技…

作者头像 李华
网站建设 2026/6/15 15:15:53

电动汽车在电网中的能量管理与调度探索

电动汽车在电网中的能量管理和调度。 第一部分的部分图展示如下。 &#xff08;注意:四个工作写一起了&#xff0c;每一个都是单独工作&#xff09; 1/基于网损灵敏度&#xff0c;电池老化等成本实时调度策略。 包括程序和数据&#xff0c;基于cvx求解。 2/孤网支持的充电站的能…

作者头像 李华
网站建设 2026/6/15 12:23:55

大模型驱动的智能客服Agent系统设计与实现,建议程序员收藏学习

这篇文章详细介绍了企业级客服Agent系统的设计哲学与实现方法。核心是将客服Agent定位为业务执行系统而非聊天机器人&#xff0c;通过风险分层架构、明确"真理来源"、多轮控制环设计等手段&#xff0c;确保系统将不确定的用户输入收敛为确定的业务指令。文章还探讨了…

作者头像 李华