c++返回值使用引用的注意事项

news2024/11/25 19:11:23

c++返回值使用引用的注意事项

  • 问题
  • 原因
  • 返回函数的引用形参
  • 另外一个问题
  • 解决方法

问题

在这里插入图片描述
在这里插入图片描述
引用变量b接受到的值为无意义的数字。

原因

int& b = returnYingyong();

相当于:

int i2 = 3;
int& b = i2;
销毁 i2;

将局部变量作为返回值,导致引用b数据无意义。(局部变量是生命周期短,函数调用结束就释放内存空间了)

如果返回局部变量的引用,其本质是野指针,后果不可预知。

我们将变量i2的生命周期延长就行:
在这里插入图片描述
在这里插入图片描述
但这样做意义不大。

返回函数的引用形参

我们在开发中更常用的方法是:返回函数的引用形参

就是:函数的形参是引用,函数的返回值也是引用

//将函数的形参和返回值都用引用
int& demo(int& ra) {
	ra++;
	cout << "ra的地址为;" << &ra << "\tra的值为:" << ra << endl;
	return ra;
}
void testYingYong9() {
	int i = 1;
	int& c = demo(i);
	cout << "i的地址为:" << &i << "\ti的值为:" << i << endl;
	cout << "c的地址为:" << &c << "\tc的值为:" << c << endl;
}

在这里插入图片描述
这样的话,相当于形参和返回值的参数都是原来参数i的引用,就算函数调用结束,形参ra销毁,返回值参数也不会有影响(返回值参数是i的引用,i没有销毁)

另外一个问题

返回引用的函数是被引用的变量的别名,可以把他当作变量,对其赋值
在这里插入图片描述
在这里插入图片描述

相当于利用返回的引用达到了修改主函数中变量 i 的目的

解决方法

为了杜绝主函数中的变量被其他用户通过修改函数返回值的方式修改,将const作用于函数的返回值。
在这里插入图片描述
在这里插入图片描述
这样就不能直接对函数的返回值赋值来修改主函数中变量i了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LInux】进程间通信(共享内存)

文章目录 system V共享内存shmget&#xff08;创建共享内存&#xff09;ftok&#xff08;key&#xff09;ipcs指令shmctl&#xff08;销毁共享内存&#xff09;shmat代码 共享内存 system V共享内存 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&am…

新能源突围,需要发力被忽视的中端品牌战场

作者 |张祥威 编辑 |德新 今年2月&#xff0c;受特斯拉等竞品降价影响&#xff0c;深蓝SL03销量下滑至4000台。深蓝的市场部上报长安中国&#xff0c;十天后开始降价&#xff0c;3月SL03销量重回正轨。 在巨头和新势力之间灵活腾挪&#xff0c;深蓝向外界展示了爆款制造的素质…

网络安全知识点梳理(期末不挂科)

网络安全复习知识点太多梳理不清晰&#xff1f;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb;&#x1f44f;&#x1f3fb; 本文一篇帮你梳理清晰&#xff0c;内容覆盖整个大学网络安全知识点&#x1f44c;&#x1f3fb; 干货满满不看后悔&#x1f44d;&#x1f44…

leetcode 309.最佳买卖股票时机含冷冻期

题目描述 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖出股票后&#xff0c;你无法在第二天买入…

基于深度学习的高精度足球检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度足球检测识别系统可用于日常生活中或野外来检测与定位足球目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的足球目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

【Java基础学习打卡09】JRE与JDK

目录 引言一、JRE二、JDK三、JDK、JRE和JVM关系总结 引言 本文将介绍JRE、JDK是什么&#xff0c;以及JDK、JRE和JVM关系三者之间的关系。 一、JRE JRE全称为Java Runtime Environment&#xff0c;是Java应用程序的运行时环境。JRE包括Java虚拟机&#xff08;JVM&#xff09;、…

【数据结构】二叉树经典题目

1. 二叉树创建字符串 相信大部分人看了题目描述之后&#xff0c;都会和我一样一脸的懵逼。直到我看到了一个描述才恍然大悟 分为3种情况&#xff1a; 左右都为空 --省略右为空&#xff0c;左不为空 – 省略左为空&#xff0c;右不为空–不省略 这里复习一下二叉树的前序遍历…

Linux基本指令(四)

文章目录 一、新建(adduser)与删除(userdel)普通用户二、date指令三、find指令四、grep指令 一、新建(adduser)与删除(userdel)普通用户 前面我Linux登录时都是以root的身份登录的&#xff0c;从现在开始以普同用户登录&#xff0c;那么普通用户哪里来&#xff0c;是由root用户…

泰坦陨落2找不到msvcr120.dll的解决方法

msvcr120.dll是的动态链接库文件之一。它在Windows操作系统中发挥着重要的作用&#xff0c;它提供了应用程序所需的各种功能和方法。 该文件返回编译后的代码所需的支持库。msvcr120.dll包含用于C / C编译器生成的应用程序所需的重要功能&#xff0c;包括数学函数&#xff0c;…

第六节 容器(列表)

文章目录 列表掌握知识点1.1 概述1.1.1 语法格式 1.2 列表的循环遍历1.2.1 for 循环遍历列表1.2.2 while 循环遍历列表 1.3 列表的常见操作1.3.1 列表增加元素1.3.2 列表删除元素1.3.3 列表查询元素 1.4 列表的排序1.5 列表的嵌套1.6 练习 随机分班1.7 练习 判断字符结尾1.8 扩…

华为OD机试真题 JavaScript 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路

一、题目描述 给你一个字符串s&#xff0c;字符串s首尾相连组成一个环形&#xff0c;请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。 二、输入描述 输入一串小写字母组成的字符串。 三、输出描述 输出一个整数。 四、解题思路 题目要求在给定的环形字符串中…

HTML中嵌入JavaScript代码的三种方式

第一种方式: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>HTML中嵌入JavaScript的第一种方式</title> </head> <body> <!-- 1.要实现的功能…

Unix/Linux操作系统的最强入门科普(经典)

今天这篇文章&#xff0c;我们来聊聊操作系统&#xff08;Operating System&#xff09;。 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑&#xff0c;使用的是windows和macOS系统&#xff1b;用手机、平板电脑&#xff0c;则是…

深度学习入门——神经网络

神经网络 神经网络是一种受到人脑神经系统启发的机器学习模型。它由一系列相互连接的人工神经元组成&#xff0c;这些神经元以层次结构排列。每个神经元接收来自上一层神经元的输入&#xff0c;并根据权重和激活函数对输入进行加权处理&#xff0c;然后将输出传递给下一层神经…

【框架源码】Spring源码解析之Bean创建源码流程

问题&#xff1a;Spring中是如何初始化单例bean的&#xff1f; 我们都知道Spring解析xml文件描述成BeanDefinition&#xff0c;解析BeanDefinition最后创建Bean将Bean放入单例池中&#xff0c;那么Spring在创建Bean的这个过程都做了什么。 Spring核心方法refresh()中最最重要…

uniapp小程序订单页面UI

前言 之前用模板写了订单页面&#xff0c;由于需求改了导致这个页面做更新麻烦&#xff0c;弄了一下午&#xff0c;索性全部删除了自己写了&#xff0c;上面的tabs用的是b-ui框架写的&#xff0c;其他的都是原生写法。 &#x1f64f;如果这篇文章对你有帮助还请收藏点赞关注&…

【计算机视觉】不仅能分割一切简单物体,而且还能高精度分割一切复杂物体的SAM升级版本HQ-SAM来了

文章目录 一、SAM 导读二、SAM 的应用场景2.1 SAM-RBox-生成旋转矩形框2.2 Prompt-Segment-Anything-生成矩形框和掩2.3 Grounded-Segment-Anything-开放数据集检测与分割2.4 segment-anything-video-视频分割2.5 Open-vocabulary-Segment-Anything-开放词典分割2.6 SegDrawer-…

快速入门 Lua 编程

以下是一个简单的 Lua 快速编程教程&#xff0c;帮助你快速入门 Lua 编程。 安装 Lua 首先&#xff0c;你需要安装 Lua。你可以从 Lua 官网&#xff08;https://www.lua.org/download.html&#xff09;下载适合你的操作系统的安装包。安装完成后&#xff0c;你可以在命令行中…

CTFHub | 命令注入

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

记录一次scala项目导入编译失败的问题

文章目录 Scala项目环境问题记录小结 Scala项目环境 Java8 scala-2.11.12 MacBook Apple m2芯片 问题记录 1、scala版本安装 我的本地环境&#xff1a; ➜ ~ java --version openjdk 11.0.18 2023-01-17 OpenJDK Runtime Environment Homebrew (build 11.0.180) OpenJDK 64-…