C++ ——引用(下)

简介: 补充上一篇的后续内容知识

5.传值、传引用做参数

以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变

量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就

更低

而对于引用做参数而言:

  • 减少拷贝,提高效率
  • 输出型参数,改变形参,实参也改变了

下面我们来测试一下第一点效率有什么区别:

通过上述代码的比较,发现传值和引用在作为传参以及返回值类型上效率相差很大

我们在来看看第二个点:输出型参数,改变形参,实参也改变了

看到这里,问题又又又来了:这两个Swap构不构成重载

下面,我们来试一试就知道了。实际上,不管构不构成,调用时都会产生歧义


6.常引用

这里用const修饰的变量,不能直接去进行引用,在指针和引用赋值中,权限可以缩小,但是不能放大。这里的权限缩小指的是原来可读可写后变成只是可读。

关于常引用的用处:

一般用引用做参数时都是用const修饰引用。如果没有加const修饰会出现什么情况,我们不妨来看一看:

如果没有const修饰引用做参数,可能会遇到一些有const修饰的变量做参数传过去,导致权限放大了,会报错。加上const修饰就不会了(使权限缩小或者不变):

这是const修饰引用的优点所在。当然,如果需要对传过来的参数需要进行修改的话,那就不需要用const修饰。而本身变量带有const修饰的话,我们根本就不需要取进行修改。

好的,到了这里,我们对于常引用有了一定的了解,接着往下走👇

除此之外,我们知道,在类型转化的时候会产生一个临时变量,而这个临时变量具有常性,所以引用的时候一定要记得加上const,我们来举个例子你就明白什么意思了

对于函数的调用也是同理,我们来看一看:

返回的是n的临时拷贝,具有常性,我们可以用const修饰来接收即可。

至此,我们解决了大部分的问题 。


7.引用和指针的区别

语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间

底层实现上实际是有空间的,因为引用是按照指针方式来实现

怎么去理解这句话,我们可以去扒拉一下引用和指针的反汇编代码对比(ra是指针变量)

我们可以看到的是:引用是按照指针方式来实现

到这里,通过上面对引用的介绍,我们可以与指针做一个对比。

引用和指针的不同点 :

  • 引用在定义时必须初始化,指针没有要求
  • 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
  • 没有NULL引用,但有NULL指针
  • 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占
    4个字节)
  • 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  • 有多级指针,但是没有多级引用
  • 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  • 引用比指针使用起来相对更安全 ,因为没有NULL引用。

总结

到了这里,对于引用的基本知识我们算是具体说完了。说多不多,说少也不少,其中的知识还是值得我们去学习的,这次就先到这里结束了🌹

相关文章
|
21天前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
44 9
|
21天前
|
存储 安全 编译器
【C++专栏】C++入门 | 函数重载、引用、内联函数
【C++专栏】C++入门 | 函数重载、引用、内联函数
29 0
|
13天前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
29 2
|
16天前
|
C++
C++程序中对象成员的引用
C++程序中对象成员的引用
23 2
|
21天前
|
存储 安全 编译器
【C++入门】缺省参数、函数重载与引用(下)
【C++入门】缺省参数、函数重载与引用
|
3天前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
5天前
|
存储 C++
C++中的引用技术详解
C++中的引用技术详解
24 0
|
9天前
|
存储 C++
c++引用
c++引用
16 1
|
15天前
|
存储 安全 编译器
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(下)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
19 0
|
15天前
|
存储 编译器 C语言
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用(中)
从C语言到C++②(第一章_C++入门_中篇)缺省参数+函数重载+引用
22 0