C++——入门讲解(3)

news2025/1/16 17:45:26

作者:几冬雪来

时间:2023年4月19日

内容:C++入门内容讲解

目录

前言:  

1. 引用(续):

1.输出型参数: 

2.传引用返回:

2.常引用: 

3.auto: 

结尾: 


前言:  

在上一篇博客中我们有对C++内容有了更加深入的了解,但是我们还了解的表格全面,在这篇博客中我们将继续了解新的知识,并且对老知识也进行一个拓展讲解。

1. 引用(续):

在上一篇博客中我们对C++中的引用有了初步的了解,今天我们将对其进行一个知识的拓展。 

首先就是这里,在上面的代码中我们将b取别名为c后,下面再让c = x的操作不是我们的取别名操作,而是赋值操作。 

这里要知道我们引用的一个知识点,那就是引用一旦引用了一个实体,再不能引用其他实体

并且和我们整形类型相同的是,一旦我们将某个值引用为x,这里的x就不能再为其他的值取别名

并且我们的引用经常运用于参数部分

1.输出型参数: 

这里经典的引用做参数就是我们的输出型参数,类似我们以前讲解过的交换两个数的值,我们就可以用引用的方法对其进行修改。 

在我们的结构体中,同样也可以使用这种方法去解决问题,并且我们这里的引用做参数可以提高我们的效率。但是这里要记住的是我们的引用不能完全的去取代指针使用

2.传引用返回:

引用不止应用于我们的传参,在传返回的时候也可以用到我们的引用。 

而我们的返回值有两种方式,一种是传值返回,一种是引用返回。 

像这里我们的传值返回,在这里我们并不是将n的值直接返回给ret,它中间要经过一个寄存器的过程把n的值放到寄存器中,最后再给给ret,这个过程我们就需要建立一个临时变量,这种方法不管什么情况都会生存临时变量。如果这里我们想不要创建临时变量的话,我们就需要用引用返回。 

这里我们传引用返回的第一个点就是不会生成临时变量,不生成临时变量的话就是减少了拷贝,提高了我们的效率。(如果是大对象的话,这里的影响会比较的大)

那么这里就会出现了一个问题,就是我们的传引用返回是哪里都可以使用的吗?这里的答案是:不是。还是以我们上面的代码来举例。

这里如果我们的n并不是静态区的话,那么在这里我们返回的是n的别名又因为函数结束所以我们的栈帧被销毁,那我们这里n的值也会被销毁掉,所以n的值我们不确定。但是有人就要问了,在这里对这个代码进行运行过后我们依旧可以输出1的值,为什么要说它有问题? 

这里我们就总结出来了两个点:

1.基本任何场景都可以用用引用传参。

2. 谨慎用引用做返回值,除了函数作用域,对象不在了,就不能用引用返回,还在1就你可以用引用返回。

在这里我们的引用也可以应用在函数中,在函数中它又会起到不同的作用。 

在这里我们就简单的将代码写出来,从我们的代码和结果我们还可以得出,在函数中传引用返回的话,我们可以修改和访问其返回值。 

2.常引用: 

接下来讲解的是我们的一个常引用部分的知识。 

这个部分就是我们的常引用,首先是第一段代码,因为我们的a是不能改变的,而引用是可以改变值的,所以这里我们从不能改到能改,权限被扩大了,而在引用过程中我们的权限是不能放大的

接下来第二段就是简单的拷贝赋值操作,对d的改变不影响c

最后一段的话也是可以的,我们可以通过y去改变x,但是不能通过z去改变x,这叫做权限的缩小,是被允许的。 

接下来我们来看下一题,这块左边的代码不行,右边的代码可以。这是因为在double->int过程中发生了类型的改变,而类型的改变都具有常性,相当于被const修饰,所以左边的代码属于权限的放大,右边的代码属于权限的平移。 

同理,在函数调用的过程中我们也要注意权限的变化。 

 

首先是我们的传值返回,在上面我们有说过传值返回在过程中会生成一个临时变量来辅助我们完成传值的操作,我们是不能对其进行修改的在main函数中我们的第一个代码加了const所以是不能修改的,没有权限放大,但是第二个代码是可以修改的,权限被放大了,因此是不对的。 

 

接下来是我们的传引用返回,在这里我们的两个代码都可以使用了。因为在这个期间并没有临时变量的产生,所以我们可以去改变它们的值。 

在这里我们要普及一个知识点:

在语法层次,引用不开空间,是取别名,但是在底层汇编指令的实现角度看,引用是类似指针的方法实现的。

 

这里我们的引用要比指针要安全,因为指针会出现野指针,空指针等,但是引用不会。 

3.auto: 

接下来是我们的auto,那么它在C++中发挥着什么作用呢?

这里我们写一个代码来表示和讲解一下。 

 

auto可根据右边的表达式自动推导出c的类型。平时比较少用到auto,当我们的类型很长的时候才会用到auto。 

接下来我们来简单的说一下auto的一种语法的应用。

 

这个代码适用于数组,它的意思是依次取数组的数据赋值给e,自动迭代,自动判断结束。我们现在先了解有这种东西就行。 

这里我们也可以对它进行改变的操作,只不过在这里我们的原本的e的改变不影响数组,所以这里就要用到我们的引用去解决问题。 

 

但是这里要注意一个点

在这种情况的时候我们就不能使用auto,因为这里我们的array已经不是数组而是指针,它指向的是首元素的地址,所以在这里我们不能这样去用它。 

结尾: 

到这里我们的C++的入门内容就又学习的一部分了,在这里我们增强了对于C++内容的了解,同时也补充了C语言中一些坑还有不足的地方。最后希望这篇博客可以为正在学习C++的同学带来帮助。 

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

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

相关文章

Android安全性:保护你的应用和用户数据

Android安全性:保护你的应用和用户数据 引言 在移动应用开发领域,Android系统占据着主导地位,随着智能手机的广泛普及和移动应用的快速发展,越来越多的开发者投入到Android应用的开发中。然而,随着Android应用的数量不…

React--》useReducer的讲解与使用

目录 useReducer的使用 刨析useReducer参数 useReducer的使用 useReducer的使用 在React函数式组件中,我们可以通过useState()来创建state,这种state创建方式会给我们返回两个东西state和setState()。state用来读取数据,而setState()用来…

走心Python实战应用:【requests+re 模块】快速下载原shen图片

人生苦短,我用python 这次给大家带来的是模块实战 以便大家理解学习 觉得写的好的话,可以给我多多点赞鸭~ 走心Python实战应用:【requestsre 模块】快速下载原shen图片 一、理解Python requests 模块二、requests 方法三、ruqusets 模块实…

第15章_File类与IO流

第15章_File类与IO流 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。 一个File对…

渗透测试成功的8个关键,98%的人都理解错了

01 知道为什么要测试 执行渗透测试的目的是什么?是满足审计要求?是你需要知道某个新应用在现实世界中表现如何?你最近换了安全基础设施中某个重要组件而需要知道它是否有效?或者渗透测试根本就是作为你定期检查防御健康的一项例行…

最新版本 Stable Diffusion 开源 AI 绘画工具之中文自动提词篇

✨ 目录 🎈 标签生成器🎈 提示词自动补全 🎈 标签生成器 由于输入正向提示词 prompt 和反向提示词 negative prompt 都是使用英文,所以对学习母语的我们非常不友好使用网址:https://tinygeeker.github.io/p/ai-prompt…

第05讲:OpenTracing 简介,先有标准后有天

自从 Google Dapper 的论文发布之后,各大互联网公司和开源社区开发的分布式链路追踪产品百花齐放,同时也给使用者带来了一个问题,各个分布式链路追踪产品的 API 并不兼容,如果用户在各个产品之间进行切换,成本非常高。…

Sprinboot聚合项目归夷

1、前言 在创建springboot项目时,都会有一个Main方法。如果将Springboot项目设计成聚合项目时,我们是不是要把所有的子项目都按照Springboot的方式创建呢?如果是会出现什么问题,以及我们怎么解决呢? 如果我们使用maven…

在线画图网站Graph Editor的使用

网站链接 链接 网站介绍 CS Academy是一个在线的算法学习和竞赛的网站,打开网站左侧导航栏中的App目录下有一个可以在线画图的应用Graph Editor,用来画图(有向、无向)非常好用。 网站使用 网站的界面如下: 左侧为…

Golang每日一练(leetDay0037) 二叉树专题(6)

目录 109. 有序链表转换二叉搜索树 Convert-sorted-list-to-binary-search-tree 🌟🌟 110. 平衡二叉树 Balanced Binary Tree 🌟 111. 二叉树的最小深度 Minimum Depth of Binary Tree 🌟 🌟 每日一练刷题专栏 …

代码随想录算法训练营第五十七天 | 647. 回文子串、516.最长回文子序列

打卡第57天。 今日任务 ● 647. 回文子串 ● 516.最长回文子序列 647. 回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开…

【云原生进阶之容器】第六章容器网络6.6.1--Cilium网络方案概述

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

从入门到精通:带你掌握Python Requests库的全部技能

目录 引言 安装 启动用户管理项目 requests响应 Session请求 为什么Session类可以保持会话 封装requests 引言 Python Requests库是Python语言中最为流行的HTTP客户端库之一。它提供了简单易用的API,让发送HTTP/1.1请求变得异常容易,支持常见的H…

TiDB实战篇-数据导出工具Dumpling

简介 简要使用数据导出工具。 介绍 特点 适用场景 部署 下载 TiDB 社区版 | PingCAP 安装 #解压下载好的安装包 tar -zxvf tidb-community-toolkit-v6.5.0-linux-amd64.tar.gz #进入到文件夹以后解压出dumpling cd tidb-community-toolkit-v6.5.0-linux-amd64 tar -zxvf d…

MySQL中的索引index(超详细)

概念: 在MySQL中,索引(index)是一种特殊的数据结构,它能够加快数据库中数据的检索速度。索引可以看做是一本书的目录,它提供了一种快速查找数据的方式。 MySQL中的索引是建立在一张表的一列或多列上的&…

开发者社区项目开发流程

项目流程: 项目创建 首先创建一个文件夹,然后找到要创建项目的文件夹 输入CMD 进入小黑窗 输入“vue create 项目名” 创建我们这个项目(其中细节Ctrl左键点击链接见个人博客(99条消息) 创建Vue项目流程_啊唯11的博客-CSDN博客) 2.删除项认文件&#x…

C++命名空间域namespace与域作用限制符: :,cin,cout输入输出简单介绍

TIPS C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等C总计63个关键字,C语言32个关键字,具体没有必要先不去管它 域,命名空间域与namespace关键字 cpp需要解决的第一…

Java后端面试题 重难点和被问到没答上来的点(包括java基础、关系型数据库、Redis、计算机网络、Spring、Java多线程、vue等)

以下是我记录的一些重点问题和面试中被问到没答上来的问题,包括java基础、关系型数据库、Redis、计算机网络、Spring、Java多线程、vue 问题目录 1.fail-safe和fail-fast2.四引用3.explain字段重要内容4.maven三大生命周期5.MYSQL 创建修改表6.数据库三范式7.Strin…

华科超算用户手册的学习笔记

1. 资源计费 1.1 费用记账 日期费用(上限3000元)2023.04.171002023.04.18200总计300 1.2 创建实例时显示项目的余额不足 这是因为项目账户之中目前还没有足够的卡时; Note 这里是因为上次充值的卡时还在田老师的个人账户中,还需…

vue el-table 单机行选中高亮并获取行数据,再次单击取消行选中

1. 效果展示 当没有行被选中时,按钮是不可用的 当有行被选中时,该行高亮,同时按钮可用 再次点击该行,取消高亮,按钮不可用 2. 代码 2.1 组件代码 table设置了highlight-current-row,可以在选中某个数据行…