c++初阶入门(引用,引用的特性,引用的使用,引用的使用)
目录引用引用的特性引用的使用const 引用权限缩小合法权限放大非法引用引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。类型 引用别名引用对象;// C 标准对 main() 函数有特殊规定main() 函数是唯一允许不写 return 语句的函数。引用的特性引用在定义时必须初始化。一个变量可以有多个引用。引用一旦引用一个实体就不能再引用其他实体。//引用的功能 //1.做函数的形参修改形参影响实参 using namespace std; void swap(int a, int b) { int tmp a; a b; b tmp; } ////2.做函数形参减少拷贝提高效率 struct A { int a[100]; int b; // //... }; // void func(struct A* aa) {} //// 引用功能2做函数形参减少拷贝提高效率 void func(struct A aa) {} int main() { int x 1, y 2; cout x y endl; swap(x, y); cout x y endl; struct A a; // //类型struct A 函数名为a func(a); func(a); return 0; }引用的使用引用在实践中主要用于引用传参和引用做返回值中以减少拷贝、提高效率并在改变引用对象时同时改变被引用对象。引用传参与指针传参功能类似但引用传参相对更方便一些。引用返回值的场景相对比较复杂我们在这里简单介绍了一下场景还有一些内容在后续类和对象章节中会继续深入讲解。引用和指针在实践中相辅相成功能有重叠性但是各有特点互相不可替代。C 的引用与其他语言的引用如 Java有很大区别除了用法最大的区别是 C 引用定义后不能改变指向而 Java 的引用可以改变指向。一些主要用 C 代码实现的数据结构教材中使用 C 引用替代指针传参目的是简化程序避开复杂的指针但是很多同学没学过引用导致一头雾水。int func() { int ret; return ret; } ////返回的是拷贝的临时变量 int SLAT(SL ps, int i) { assert(i ps.size); return ps.arr[i]; } ////传引用返回 返回的是别名 并没有创建临时对象 可以对其进行修改const 引用可以引用一个 const 对象但是必须用 const 引用。const 引用也可以引用普通对象因为对象的访问权限在引用过程中可以缩小但是不能放大。引用权限只能缩小、不能放大权限缩小合法普通对象可以绑定const 引用int a 10; const int ra a; // 合法原对象a可读、可修改ra只能读不能改相当于访问权限收窄C 允许。权限放大非法const对象不能绑定普通非const引用const int a 10; int ra a; // 编译报错原对象a只读ra允许读写权限变大破坏常量的不可修改特性直接禁止。需要注意的是类似int rb a*3;或double d 12.34; int rd d;这样的场景中a*3的结果保存在一个临时对象中int rd d也是类似在类型转换中会产生临时对象存储中间值。也就是说rb和rd引用的都是临时对象而 C 规定临时对象具有常性所以这里就触发了权限放大必须用常引用才可以。临时对象的特殊性自带常性临时对象是编译器自动创建、没有名字、生命周期极短的中间变量表达式结果、类型转换中间值C 规定所有临时对象都是 const 性质。所谓临时对象就是编译器需要一个空间暂存表达式的求值结果时临时创建的一个未命名的对象C 中把这个未命名对象叫做临时对象。表达式运算产生临时int a 2; int rb a * 3; // 报错int main() { int x 0; int r1 x; // // 权限可以缩小 // //r1是x的别名 const int r3 x; // //r3缩小权限 const int y 1; // // 权限不能放大 int r2 y; const int r2 y; // // // 权限有没有放大没有 int z y; // // // 指针和引用才涉及权限缩小和放大 const int* p1 y; // // 权限不能放大 int* p2 p1; const int* p2 p1; int* p3 z; // // 权限可以缩小 const int* p4 p3; // // // // return 0; }这是一些记忆的零碎知识点传值传参调用拷贝构造——后定义的先析构。如果要显式地写析构就要写拷贝构造。

相关新闻

OpenAI API 上下文窗口超限排查:3 种常见错误与 5 步精准计算法

OpenAI API 上下文窗口超限排查:3 种常见错误与 5 步精准计算法

OpenAI API 上下文窗口超限排查:3 种常见错误与 5 步精准计算法 调用 OpenAI API 时,开发者最常遇到的错误之一就是上下文窗口超限。当输入的 token 数量超过模型限制时,API 会返回 context_length_exceeded 错误,导致请求失败。…

2026/7/8 6:54:58 阅读更多 →
QQ截图独立版:无需登录的专业级截图工具全解析

QQ截图独立版:无需登录的专业级截图工具全解析

QQ截图独立版:无需登录的专业级截图工具全解析 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenShot 还在为每次截图都…

2026/7/8 6:54:58 阅读更多 →
Windows APK安装器架构深度解析:从跨平台适配到权限管理

Windows APK安装器架构深度解析:从跨平台适配到权限管理

Windows APK安装器架构深度解析:从跨平台适配到权限管理 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在移动应用生态与桌面系统日益融合的今天&#xff…

2026/7/8 6:52:58 阅读更多 →

最新新闻

基于群辉 + Docker + Flask 搭建企业内部自动化服务平台

基于群辉 + Docker + Flask 搭建企业内部自动化服务平台

记录一次使用群辉 NAS 搭建企业内部自动化服务平台的实践,包括 Docker 容器部署、自动更新、远程访问以及局域网设备调度。前言随着团队内部自动化需求越来越多,需要一个统一的平台来管理各种自动化流程。相比购买云服务器,群辉 NAS 具有成本…

2026/7/8 7:39:25 阅读更多 →
AKShare金融数据接口库的企业级架构设计与性能调优方案

AKShare金融数据接口库的企业级架构设计与性能调优方案

AKShare金融数据接口库的企业级架构设计与性能调优方案 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/aks/akshare …

2026/7/8 7:37:24 阅读更多 →
Havenlon |入门认知系列:为什么我们选择海狸作为精神符号

Havenlon |入门认知系列:为什么我们选择海狸作为精神符号

为什么我们选择海狸作为精神符号?它不代表攻击,它代表边界。摘要Havenlon 选择海狸作为精神符号,并不是因为它足够可爱,也不是想给一个严肃的安全系统套上一层轻松的外壳。真正的原因只有一个:海狸是自然界里极少见的工…

2026/7/8 7:37:24 阅读更多 →
RHCA必考的vimtutor命令深度解析:从考试准入到生产自动化

RHCA必考的vimtutor命令深度解析:从考试准入到生产自动化

1. 项目概述:为什么一个“vimtutor”命令值得单独写一篇RHCA级教程?在红帽认证架构师(RHCA)的实战现场,我见过太多人卡在同一个地方——不是不会配Ansible Playbook,不是搞不定OpenShift Operator&#xff…

2026/7/8 7:37:24 阅读更多 →
为什么KMS_VL_ALL_AIO成为Windows和Office激活的终极解决方案?

为什么KMS_VL_ALL_AIO成为Windows和Office激活的终极解决方案?

为什么KMS_VL_ALL_AIO成为Windows和Office激活的终极解决方案? 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在数字化办公环境中,Windows操作系统和Microsoft Office套…

2026/7/8 7:35:24 阅读更多 →
AKShare股票数据获取策略:构建稳定高效的金融数据采集架构

AKShare股票数据获取策略:构建稳定高效的金融数据采集架构

AKShare股票数据获取策略:构建稳定高效的金融数据采集架构 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/ak…

2026/7/8 7:35:24 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻