【C++】入门三

接下来我们说一下引用 这个概念,那么什么是引用呢?简单来说引用就是取别名,比如有一个变量叫a,现在我给它取了一个别名叫b,那么此时a和b管理的都是一块空间

这个例子就可以很好的体现a和b管理的是同一块空间,在语法上b是不会开辟空间的,但是我要说的是在底层,引用还是用指针实现的,可以通过汇编代码去看一下

我们可能看不懂汇编代码,但是我们可以看出来它们的形式是一样的,所以在底层上引用还是用指针实现的,但我们在实际用的时候只用考虑它的语法就可以了。所以当我们对别名用sizeof的时候,它的大小是这个值的大小

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

c 复制代码
	int a = 0;
	int& b = a;
	int& v = b;
	int& f = b;
	int& c = f;

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

c 复制代码
void Swap(int& a, int& b) {
	int tmp = a;
	a = b;
	b = tmp;
}

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


我们得用二级指针才可以,但是现在我们有了引用的话,就可以直接操作头节点的指针了


当然引用传参数和传值返回还是比较效率高 的,因为如果是正常传参和返回的话它是需要拷贝的

下面说一下内联函数 ,我们知道宏函数在执行的时候就是按照定义的时候展开就行了,不要开辟栈帧,对于一些简单的函数来说它确实是比较效率高的,但同时它也不能调试,这也是比较麻烦的一点,所以我们在C++中就搞出了内联函数,它既可以像宏函数一样展开也能调试,包含了它们两个的优点,它的基本使用是这样的

c 复制代码
#include<iostream>
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;
}

我们可以通过汇编代码看一下它是否是直接展开的,但是在这之前我们要修改两个设置

之后我们再看一下汇编代码

可以看到根本就没有调用函数

另外内联函数的声明和定义不能分离,我们一般把它们都放在头文件中就可以了

相关推荐
Yyyyyy~21 分钟前
【Java】Day4Web基础知识
java·spring boot
D e re k ZH1 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
灿飞屋2 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
NE_STOP2 小时前
Spring AI Alibaba - MCP入门
java
nice_lcj5202 小时前
【从零理解 Spring AI · 07】对话记忆:让模型记住上一句说了什么
java·spring ai·ai应用开发·chatmemory·对话记忆
zaizai10072 小时前
【Effective Modern C++】学习第一章
c++
Fruiticecake3 小时前
C 程序员速通现代 C++(一):lambda、std::function、移动语义与智能指针
c语言·c++
SL_staff3 小时前
制造业交付崩盘?用跨部门节点协同计划打通销售、生产与质量链路
java·开源·产品
青少儿编程课堂3 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛