• 第一章、引用


    目录

    一、概念

    1>基础定义

    2>引用作为函数的返回值

    3>常引用

    4>附件餐


    一、概念

    1>基础定义

    类型名 & 引用名 = 变量名;

    上面这个写法就定义了一个变量名的引用。

    举个例子:

    int x = 0;

    int & y = x;

    此时 y 引用了x, y的类型是int &

    变量的引用就等价于这个变量,简单来说,y就是x的别名。

    举个代码例子,如下一目了然

    1. #include
    2. using namespace std;
    3. int main(){
    4. int x = 3;
    5. int & y = x;
    6. cout << y; // 3
    7. cout << x; // 3
    8. y = 5;
    9. cout << x; // 5
    10. return 0;
    11. }

    注意📢,引用需要注意三点

    1. 定义时,一定要初始化成某个变量,比如上面的例子y是引用的x
    2. 引用从一而终!y生是x的引用,死也是x的引用,不会在引用别的变量了
    3. 引用时只能引用变量,不能引用常量和表达式

    ok,了解了注意的三点,看个例子加深理解

    1. int a=1,b=2;
    2. int & x = a;
    3. int & y = x;// 此时x和y都引用了a
    4. y = 10;
    5. cout << a << endl; //10
    6. y = b;
    7. cout << a << endl; //2

    上面的例子需要稍微理解的是,当y=b的时候,此时是赋值,b的值给了y,但是y还是a的引用,所以此时a打印是2.

    例题1.1

    下面程序片段输出结果是什么?(答案会公布在评论区)

    1. int a = 1,b = 2;
    2. int & r = a;
    3. r = b;
    4. r = 7;
    5. cout << a << endl;

    nice,恭喜各位已经对引用小有了解,那么接下来,带大家一起看一个简单的实战,让大家了解一下引用的妙处。

    大家回忆一下,在c语言中,交换两个变量的值的函数如何写?如下

    1. void swap(int* a, int* b){
    2. int tmp;
    3. tmp = *a; *a = *b; *b = tmp;
    4. }
    5. int x,y;
    6. swap(&x,&y)

    上面的代码是c实现x和y交换值的代码,是不是比较繁琐?再一起看看c++的引用

    1. void swap(int& a, int& b){
    2. int tmp;
    3. tmp = a; a = b; b = tmp;
    4. }
    5. int x,y;
    6. swap(x,y)

    上面的写法是不是看上去清爽许多。

    2>引用作为函数的返回值

    1. int x =3;
    2. int & SetValue() { return x;}
    3. int main(){
    4. SetValue() = 10;
    5. cout << x; //10
    6. return 0;
    7. }

    SetValue函数的返回值是引用,同时,这个引用了全局变量x,所以赋值的操作,就等于对x的赋值;这里埋一个坑,大家肯定会有人思考,为什么要把函数写在赋值号左边?这个操作有什么意义呢?莫急,待后面的章节中,和大家一起升级打怪后,会填坑的!

    3>常引用

    定义引用时,前加const关键字,就是常引用

    int x;

    const int & y = x;

    y的类型就是const int &;是不是感觉很熟悉

    那么它的作用是什么呢?就是不能通过修改常引用去修改引用的值;直白点借用上面的例子说就是,你不能通过给y赋值,来修改x的值,如下:

    1. int x=3;
    2. const int & y=x;
    3. y=200;//编译直接报错
    4. x=200//ok

    4>附件餐

    说一个工作中可能会遇到的的类似情况

    常引用和非常引用的转换问题,const T & 和 const T是不同的类型,重要的是重复三遍哈!!!

    T & 类型的引用或者T类型的变量可以用来初始化const T & 类型的引用

    但是,const T & 类型的引用或者const T类型的常变量可以用来初始化 T & 类型的引用,除非进行强制类型转换。

    例题1.2

    下面程序片段哪个正确?(答案会公布在评论区)

    1. A) int n = 4;
    2. int & r = n * 5;
    3. B) int n = 6;
    4. const int & r = n;
    5. r = 7;
    6. C) int n = 8;
    7. const int & r1 = n;
    8. int & r2 = r1;
    9. D) int n = 8;
    10. int & r1 = n;
    11. const int r2 = r1;

    好了,今天关于引用的部分就到此结束了哈,小白成神之路,刚刚开始~

  • 相关阅读:
    1 Spring Boot快速入门
    基于大模型GPT,如何提炼出优质的Prompt
    SpringSecurity以及Oauth2(笔记)
    React Hooks、useState、useEffect 、react函数状态
    操作系统-设备
    matlab高斯消元法求逆
    从心灰意冷到自学Java3个月顺利拿到offer,多亏这份文档
    NFT入门:部署示例等
    工业设计的特点和流程
    Google Earth Engine(GEE)——指数运算并加载和影像下载
  • 原文地址:https://blog.csdn.net/flying_1314/article/details/126808810