• 【C++】入门三


    接下来我们说一下引用这个概念,那么什么是引用呢?简单来说引用就是取别名,比如有一个变量叫a,现在我给它取了一个别名叫b,那么此时a和b管理的都是一块空间
    在这里插入图片描述
    这个例子就可以很好的体现a和b管理的是同一块空间,在语法上b是不会开辟空间的,但是我要说的是在底层,引用还是用指针实现的,可以通过汇编代码去看一下
    在这里插入图片描述
    我们可能看不懂汇编代码,但是我们可以看出来它们的形式是一样的,所以在底层上引用还是用指针实现的,但我们在实际用的时候只用考虑它的语法就可以了。所以当我们对别名用sizeof的时候,它的大小是这个值的大小
    在这里插入图片描述

    别名还是能取别名的,随便取都是可以的

    	int a = 0;
    	int& b = a;
    	int& v = b;
    	int& f = b;
    	int& c = f;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    那么引用到底有啥用呢?这里举两个简单的例子,一个是交换函数,我们之前是用指针写的,写起来确实麻烦一些,用引用会简化一些

    void Swap(int& a, int& b) {
    	int tmp = a;
    	a = b;
    	b = tmp;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们之前再用C语言再写链表的时候用到了二级指针,在这里我们就可以使用引用来避免二级指针的麻烦,比如说,我们之前是这么写的
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    我们得用二级指针才可以,但是现在我们有了引用的话,就可以直接操作头节点的指针了
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    当然引用传参数和传值返回还是比较效率高的,因为如果是正常传参和返回的话它是需要拷贝的
    下面说一下内联函数,我们知道宏函数在执行的时候就是按照定义的时候展开就行了,不要开辟栈帧,对于一些简单的函数来说它确实是比较效率高的,但同时它也不能调试,这也是比较麻烦的一点,所以我们在C++中就搞出了内联函数,它既可以像宏函数一样展开也能调试,包含了它们两个的优点,它的基本使用是这样的

    #include
    using namespace std;
    inline int Add(int x, int y) {
    	return x + y;
    }
    int main() {
    	int ret = Add(1, 2);
    	cout << ret << endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    我们可以通过汇编代码看一下它是否是直接展开的,但是在这之前我们要修改两个设置
    在这里插入图片描述
    在这里插入图片描述
    之后我们再看一下汇编代码
    在这里插入图片描述
    可以看到根本就没有调用函数
    另外内联函数的声明和定义不能分离,我们一般把它们都放在头文件中就可以了

  • 相关阅读:
    html制作网页案例代码----(故宫博物馆9页)特效很多
    win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版
    【408专项篇】C语言笔记-第七章(函数)
    基于PHP的校园竞赛信息网站 毕业设计-附源码221230
    RFID系统简介:优点、应用与发展前景
    PyQt5_pyqtgraph鼠标在折线图上画线段
    CCF-CSP 30次 第二题【矩阵运算】
    I/O
    订单超时未支付自动取消8种实现方案
    为什么吃奶粉的宝宝比吃母乳宝宝更胖?
  • 原文地址:https://blog.csdn.net/2201_76024104/article/details/134474870