当前位置: 首页 > news >正文

【C++】入门三

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

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

	int a = 0;int& b = a;int& v = b;int& f = b;int& c = f;

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

void Swap(int& a, int& b) {int tmp = a;a = b;b = tmp;
}

我们之前再用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;
}

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

相关文章:

  • 机器学习与图像识别(二)—— OpenCV环境折腾。。
  • 【Linux】20、进程状态:不可中断进程、iowait、僵尸进程、dstat strace pstree
  • oracle-buffer cache
  • 华为模拟器dhcp实验
  • X3DAudio1_7.dll丢失原因,X3DAudio1_7.dll丢失怎样解决分享
  • 星火模型(Spark)的langchain 实现
  • TDengine 跨版本迁移实战
  • lambda表达式c++
  • php mysql 如何处理查询中存在正则特殊字符的查询
  • 十、Linux运行级别
  • 常见的SQL语句及函数
  • 线程的三种创建方式
  • GitHub如何删除仓库
  • 数据分析—将txt文件转为csv文件;将csv文件转为xls文件
  • 04 后端增删改查【小白入门SpringBoot + Vue3】
  • #Java异常处理
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017前端实习生面试总结
  • Android Studio:GIT提交项目到远程仓库
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • interface和setter,getter
  • Python打包系统简单入门
  • React 快速上手 - 07 前端路由 react-router
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 读懂package.json -- 依赖管理
  • 好的网址,关于.net 4.0 ,vs 2010
  • 区块链分支循环
  • 入口文件开始,分析Vue源码实现
  • 数据可视化之 Sankey 桑基图的实现
  • 通过几道题目学习二叉搜索树
  • 原生Ajax
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ###项目技术发展史
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #单片机(TB6600驱动42步进电机)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (Note)C++中的继承方式
  • (ZT)出版业改革:该死的死,该生的生
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)ABI是什么
  • .Net 4.0并行库实用性演练
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET轻量级ORM组件Dapper葵花宝典
  • .Net中的集合
  • .sh 的运行
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @property @synthesize @dynamic 及相关属性作用探究
  • [1]-基于图搜索的路径规划基础
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [C++核心编程](四):类和对象——封装
  • [FFmpeg学习]从视频中获取图片
  • [flask]http请求//获取请求体数据