> 文章列表 > C++——入门讲解(3)

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

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

作者:几冬雪来

时间: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++的同学带来帮助。