C++中的内存分区、引用、函数
内存分区模型
- 代码区
- 存放CPU执行的机器指令
- 代码区是共享的且具有只读性
- 全局区
- 全局变量和静态变量都存放在此处
- 全局区还包括了常量区、字符串常量和其他常量也存放在此
- 该区域的数据在程序结束后由操作系统释放
- const修饰的局部变量并不算在全局区
- 栈区
- 由编译器自动分配和释放,存放函数的参数值,局部变量等
- 不要返回局部变量等地址,栈区开辟的数据由编译器自动释放
- 堆区
- 由程序员分配释放,若程序员不释放,程序结束时,由操作系统回收
- cpp中就是new—new后返回地址
- 代码区和全局区—运行前划分的两个区域
- 堆栈区—运行后划分区域
- new的分析
- 在堆中开辟空间—delete对应进行删除
- new返回是该类型的指针
- 语法: new 数据类型
int *p = new int (10); delete p; int *arr = new int[10];//10个元素 for (int i = 0; i < 10;i++){arr[i] = i; } delete[] arr;
引用
- 给变量起别名
- 定义
- 数据类型 &别名 = 原名
- 别名和原名其实本质上就代表了同一块内存
- 注意事项
- 引用必须要初始化
- 引用初始化后就不可以改变
- 引用做函数参数
- 作用—函数传参时,可以利用引用技术让形参修饰实参
- 优点—可以简化指针修改实参
- 函数传参的方式
- 值传递
- 地址传递
- 引用传递
- 引用做函数返回值
- 作用—引用是可以作为函数的返回值存在的
- 注意—不要返回局部变量的引用—static修饰后即可在全局区域,这时可以返回
- 作为函数返回值,既可以作为赋值的左值也可以是右值
int& test1(void){static a = 10;return a } int& test2(void){static b = 5;return b } int &c = test1();//c指向10 test2() = 1000;//将b改为1000 - 引用的本质在cpp内部就是一个指针常量
- int &ref = a; <==> int* const ref = &a
- ref = 20 <==> *ref = 20
- 所以引用一旦初始化后就不可以发生改变
- 常量引用
- 作用—修饰形参防止误操作
- 两种使用场景
- const int& ref = 10;—合法—int temp = 10; const int &ref = temp;
- int& ref = 10;—非法—引用必须引用一块合法的内存空间
- 修饰形参来防止误操作—void show(const int& tem)—这样函数内部不可修改tem指向的内存
函数提高
- 函数的默认参数
- cpp中函数的形参列表中的形参是可以有默认值的
- 语法—返回值类型 函数名 (参数=默认值){}
- 默认参数依然可以修改,传入参数的优先级更高
- 注意
- 如果某个位置有默认参数则从这个位置往后,从左到右都必须有默认值
- 如果函数声明有默认参数,函数的实现就不能有默认参数
- 声明和实现只能有一个地方有默认值
- 函数占位参数
- cpp中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
- 语法—返回值类型 函数名 (数据类型){}—void test(int a, int){}
- 占位参数也可以默认参数
- 函数重载
- 函数名可以相同,提高复用性
- 根据函数参数的不同来判断调用哪一个参数
- 条件
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同或者个数不同或者顺序不同
- 函数返回值不同不能作为重载条件
- 注意事项
- 引用作为函数重载的条件
- 在碰到const修饰的参数时,需要明确,可以实现常数的传递const int &a 可以被传递10
- const可以作为重载条件,但是要注意传什么值
- 函数重载碰到函数的默认参数
- 可能出现多个可调用
void test(int a);void test(int a, int b = 10);//如果如下调用则不合法test(10);//如果如下调用则合法test(10, 20); - 引用作为函数重载的条件
相关文章:
C++中的内存分区、引用、函数
内存分区模型 代码区 存放CPU执行的机器指令代码区是共享的且具有只读性 全局区 全局变量和静态变量都存放在此处全局区还包括了常量区、字符串常量和其他常量也存放在此该区域的数据在程序结束后由操作系统释放const修饰的局部变量并不算在全局区 栈区 由编译器自动分配和释放…...
关于angular表格total模板中一直为0
哈喽 小伙伴们大家好昨天在用angular得antdesign组件得table表格 我用total模板 结果,total一直为0这可是愁坏我了 <ng-template #totalTemplate let-total>找到 {{ total }} 条结果</ng-template>[nzShowTotal]"totalTemplate"最后找到原因了…...
多线程事务怎么回滚
背景介绍1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败&…...
基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)
1.基于Carry4进位链设计原理 常见的基于FPGA开发的TDC有直接计数法,多相位时钟采样法,抽头延迟线法等,之前内容为基于多相位的TDC,本章节中,主要讲解基于抽头延迟线法。在Xilinx FPGA开发中,实现抽头延迟线法有很多种,如使用IODELAY构建延迟进位链,此处将介绍基于Carr…...
【C++】二叉搜索树的实现(递归和非递归实现)
文章目录1、二叉搜索树1.1 构建二叉搜索树1.2 二叉搜索树的插入1.3 二叉搜索树的删除1.4 二叉搜索树插入和删除的递归实现为了学习map和set的底层实现,需要知道红黑树,知道红黑树之前需要知道AVL树。 红黑树和AVL树都用到了二叉搜索树结构,所…...
春招来了,如何正确使用领英超高效招聘海外员工、挖掘人才?
金三银四到了,每年的这个时候都是企业招聘的好时机。而领英是目前全球最大的职场社交网络平台,基本上海外求职都是在使用它,所以很多企业涉及到海外招聘时,都会优先考虑领英,但是却经常缺乏一些经验技巧,今…...
Mysql中锁机制深入理解
Mysql中锁机制深入理解默认大家已经知道。分类性能悲观锁,乐观锁操作类型读锁,写锁,数据粒度表锁,行锁,页面锁更细粒度间隙锁,临键锁按使用来讲。由数据粒度出发。表锁,分为 共享锁,…...
去中心化社交网络协议除了Nostr还有哪些?
当下最火的去中心化社交软件Dmaus就是基于Nostr协议开发的,Nostr协议的基本情况之前的文章《一文了解去中心化社交网络协议Nostr》已经做了详细介绍,本文将介绍其他几个目前比较流行的去中心化社交协议。FarcasterFarcaster是由前Coinbase高管Dan Romero…...
【FT2000/4+X100】调试记录
订阅专栏 硬件环境FT2000/4+X100,单板结构,对外显示,运行银行麒麟操作系统。 一 生成UEFI.BIN,烧写在FT2000-4的QSPI Flash中 1 2 下载源文件 edk2-for-support.tar; 参考文件 ft2004c&D2000编译打包说明V1.0.5; 解压源文件; 根目录下 build2004C.sh为四核产品…...
我的Android启动优化—【黑白屏优化】
简述 在Android App使用过程中,对于应用的优化是一个加分项,举个例子,打开你的App需要2秒,人家0.5秒,这就是很大的用户体验上的优化。 问题的产生 在开发中,我们在启动app的时候,屏幕会出现一…...
TongWeb8编码设置说明
应用场景:在遇到中文问题时,常需要通过设置编码格式来解决问题。下面介绍TongWeb8的编码设置及优先级。一、web.xml中请求、响应编码的配置优先级最高在JavaEE8规范中web.xml增加了request, response编码配置,该配置优先级最高。<?xml ve…...
不同相机之间图片像素对应关系求解(单应性矩阵求解)
一、场景 相机1和相机2相对位置不变,相机拍摄图片有重叠,求他们交叠部分的一一对应关系。数学语言描述为已知相机1图片中P点像素(u1, v1),相机1中P点在相机2图片中像素值为(u2, v2),它们存在某种变换,求变换矩阵。 因为…...
远程管理时代,还得是智能化PDU才靠得住!
在如今这个信息技术高速发展的时代,数据中心IDC机房服务器数量与日俱增,提供DNS域名服务、主机托管服务、虚拟主机服务等服务的服务器是IDC最基本的功能之一。服务器需要7*24小时不间断持续工作,但当服务器数量很大,服务器工作、重…...
通俗易懂理解——布隆过滤器
文章目录概述本质优缺点优点:缺点:实际应用解决redis缓存穿透问题:概述 本质 本质:很长的二进制向量(数组) 主要作用:判断一个数据在这个数组中是否存在,如果不存在为0,…...
TypeScript 学习之类型推导
在一些情况下,代码上没有显性明确类型,typescript 可以隐形推断出类型。 基础 let x 3;变量x的类型被推断为数字。 类型推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时 最佳通用类型 let x [0, 1, null]; // 类型为 numb…...
Android四大组件——Service详解
Service 为后台运行,不可见,没有界面。优先级高于Activity(内存不足时先杀掉Activity),运行在主线程且不能做耗时操作。 一、Service 启动方式 1、startService() 通过 startService 启动后,service会一直…...
svg转png
svg转png写了一个spring boot项目,支持传入svg文件转出png图片,并且自定义转出png的宽和高。主要代码如下:所需依赖如下:演示如下:首先,运行项目使用接口调用工具调用接口发送请求,提取文件1000…...
教你如何搭建人事OA-员工管理系统,demo可分享
1、简介1.1、案例简介本文将介绍,如何搭建人事OA-员工管理。1.2、应用场景人事OA-员工管理应用对员工信息进行管理,可办理入职、转正、离职等流程。2、设置方法2.1、表单搭建1)新建表单【员工管理】,字段设置如下:名称…...
C++递推基础知识
文章目录一、递推的概念二、递推和递归的区别三、递推的实例1、最基础的:斐波那契数列2、变形版斐波那契数列3、较复杂的递推式求解:昆虫繁殖4、经典逆推问题:题目数量一、递推的概念 1、什么是递推算法? 递推算法:是…...
【Python入门第十天】Python 布尔
布尔表示两值之一:True 或 False。 布尔值 在编程中,通常需要知道表达式是 True 还是 False。 可以计算 Python 中的任何表达式,并获得两个答案之一,即 True 或 False。 比较两个值时,将对表达式求值,P…...
[Deep Agents:LangChain的Agent Harness-07]利用PatchToolCallsMiddleware修复错乱的消息结构
作为LLM提示词的一个重要组成部分,表示对话历史的消息列表在结构上有一个基本的要求:如果LLM返回的AIMessage包含ToolCall对象,那么Agent会期望每个ToolCall对象都有对应的ToolMessage。但是Agent在执行过程会因为一些异常导致LLM返回的AIMes…...
保姆级避坑指南:用STM32CubeMX配置NRF24L01 SPI通信,从硬件连接到软件调试一气呵成
STM32CubeMX实战:NRF24L01无线通信全流程避坑指南 第一次接触NRF24L01模块时,我被它小巧的体积和低廉的价格所吸引,但真正开始调试时才发现这个"玩具级"射频模块藏着不少坑。记得有一次项目交付前夜,模块突然无法通信&a…...
基于Vue3的一站式AI服务聚合平台部署与二次开发实战指南
1. 项目概述与核心价值最近在折腾AI应用,发现很多朋友想自己搞个ChatGPT或者Midjourney的网站来用,甚至是想做个副业,但往往卡在几个关键环节:一是API的对接和费用管理太麻烦,二是用户系统和支付分销这些基础功能从零搭…...
Dify工作流智能生成器:用自然语言快速构建AI应用
1. 项目概述:一个为Dify AI工作流“编程”的智能生成器如果你正在使用Dify构建AI应用,并且对反复拖拽节点、配置连线、调试参数感到一丝疲惫,那么Tomatio13/DifyWorkFlowGenerator这个项目可能会让你眼前一亮。它本质上是一个“用自然语言描述…...
【大模型灰度发布黄金法则】:奇点智能大会首次披露7大避坑指标与实时熔断阈值
更多请点击: https://intelliparadigm.com 第一章:大模型灰度发布策略:奇点智能大会 在2024年奇点智能大会上,多家头部AI企业联合发布了面向生产环境的大模型灰度发布参考架构,强调“可控、可观、可退”三大核心原则。…...
Maven项目实战:手动部署Oracle JDBC驱动的本地仓库配置指南
1. 为什么需要手动安装Oracle JDBC驱动 遇到Maven项目提示"Missing artifact com.oracle:ojdbc6:jar:11.2.0.3"时,很多Java开发者都会一头雾水。我刚开始接触Maven时也踩过这个坑,后来才明白这是因为Oracle的JDBC驱动(ojdbc&#x…...
现代生产级微服务+容器治理完整技术栈与架构方案详解(国内主流完整云原生微服务闭环架构)
文章目录一、业务开发层(代码基座,所有业务的底层核心)1.1 核心开发框架基座1.2 持久层与分库分表框架1.3 统一认证授权体系(企业必备)二、微服务治理层(保障高可用,简历核心亮点)2.…...
告别漫长等待:用Anaconda一行命令搞定XGBoost-GPU版安装(Windows/Linux通用)
告别漫长等待:用Anaconda一行命令搞定XGBoost-GPU版安装(Windows/Linux通用) 在机器学习领域,XGBoost因其出色的性能和广泛的应用场景而备受推崇。然而,当面对大规模数据集时,传统的CPU计算往往显得力不从心…...
保姆级教程:用Python多进程+队列搞定海康/大华摄像头实时预览,告别卡顿延迟
Python多进程与队列优化:实现多路摄像头无延迟实时预览 在安防监控、智能识别等实时视频处理领域,开发者常遇到多路摄像头同时读取时的性能瓶颈。传统单线程方式处理视频流时,由于I/O阻塞和计算密集型操作交织,极易导致视频延迟累…...
掌握Windows与Office智能激活:KMS_VL_ALL_AIO技术深度解析
掌握Windows与Office智能激活:KMS_VL_ALL_AIO技术深度解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office软件授权问题困扰吗?KMS_VL_ALL…...
