刷野打怪上王者·C++篇·第7期·数据存储

国央企创新负责人如何通过平台提升技术需求挖掘与资源配置的精准性?.docx 国央企创新负责人如何通过平台提升技术需求挖掘与资源配置的精准性? 立即下载

参考链接

RUNOOB.COM

数据存储类说明

      在编程过程需要限制和扩大函数以及变量的作用域(关于作用域上一篇已经提到点),需要一些特定的类来进行修饰。为实现上面的功能,C++定义了存储类。C++程序中使用的存储类:auto,register,static,extern,mutable,thread_local。

       但是随着C++版本的更新,从C++17开始,auto关键字不再是C++存储类,并且register关键字被弃用。

auto关键字

       auto关键字主要有两种情况:声明变量时会根据初始化的表达式自行初始化类型,声明函数时返回值的占位符。

#include <iostream>
using namespace std;
int main()
{
	auto dataType = 5.66;           //double类型
	auto dataStr("天眼工作室");      //char*
	auto dataPoint = new auto(20);  //返回常量所在的地址
	cout << "dataType = " << dataType << endl;
	cout << "dataStr = " << dataStr << endl;
	cout << "dataPoint = " << *dataPoint << endl; //返回指针地址对应的数值
	getchar();
	return 0;
}

运行结果

dataType = 5.66
dataStr = 天眼工作室
dataPoint = 20

说明:但是auto关键字也不是万能的,在对多个表达式一起进行自行初始化的时候,需要对应的类型一致。

auto dataType1 = 5.55, dataType2 = 8.88, dataType3 = 6.66;         //正确
auto dataType1 = 5.55, dataType2 = 8.88, dataType3 = "天眼工作室";  //错误,因为赋值类型不一致

register关键字

     register翻译为中文是缓存器,其实就是将要修饰的变量放到寄存器,这样做目的为了做一些快速计数。因为我们在做C++处理时,主要是将数据存储在RAM。因为将数据存储在寄存器中,所以变量的最大值不能超过寄存器(一般情况下是一个变量),并且不能使用‘&’运算符(在内存中使用‘&’)。

register int dataCount;         

static关键字

      static在程序的运行的整个过程保持局部变量的存在。这个必须说一下static的生命力很完成,对于一般的局部变量会面临空间的声明和摧毁,当然static也适用全局变量。我们还是来一段代码来更好的说明一下:

#include <iostream>
using namespace std;
//函数声明
void CountFun();
void staticCountFun();

int main()
{
	int iCout = 5;
	cout << "静态变量测试函数" << endl;
	while (iCout)
	{
		iCout = iCout - 1;
		staticCountFun();
	}
	cout << "普通变量测试函数" << endl;
	iCout = 5;
	while (iCout)
	{
		iCout = iCout - 1;
		CountFun();
	}
	getchar();
	return 0;
}
/********静态变量测试函数**********/
void staticCountFun()
{
	static int stICount = 5;
	cout << stICount-- << endl;

}
/********普通变量测试函数*********/
void CountFun()
{
	int iTmpCount = 5; 
	cout << iTmpCount-- << endl;
}

运行结果

静态变量测试函数
5
4
3
2
1
普通变量测试函数
5
5
5
5
5

     通过上面程序的运行结果,我们明显可以看到,子函数在来回调用过程中,static修饰的变量不会销毁申请的内存空间。

extern关键字

     当在写大工程文件,肯定不会只通过单个文件实现。如果可以实现估计这个代码也没有想看,自己以后也会再看。那么解决这个问题就需要进行多个文件编写,每个文件实现不同小功能。鉴于上面需求,C++创建了extern关键字。该关键字可以实现多个文件之间的函数和变量调用。不过,一定要注意extern对变量(数组、字符串等)和函数有不同的使用方式。

主文件main.cpp

#include "function.h"

int main()
{
	int iCout = 5;
	cout << "静态变量测试函数" << endl;
	while (iCout)
	{
		iCout = iCout - 1;
		staticCountFun();
	}
	cout << "普通变量测试函数" << endl;
	iCout = 5;
	while (iCout)
	{
		iCout = iCout - 1;
		CountFun();
	}
	getchar();
	return 0;
}

子文件function.cpp

#include "function.h"

/********静态变量测试函数**********/
void staticCountFun()
{
	static int stICount = 5;
	cout << stICount-- << endl;

}
/********普通变量测试函数*********/
void CountFun()
{
	int iTmpCount = 5;
	cout << iTmpCount-- << endl;
}

子文件function.h

#include <iostream>
using namespace std;
//函数声明
extern void CountFun();
extern void staticCountFun();

运行结果

静态变量测试函数
5
4
3
2
1
普通变量测试函数
5
5
5
5
5

mutable关键字

     mutable其实在这里讲对于初学者可能有点难,因为mutable主要允许对象成员的变量可以进行改变。说白了就是和const相反操作,对const函数里面的变量修改。下面我们看一下代码:

#include <iostream>
using namespace std;

class Project {
public:
	Project();
	~Project();
	int getProjectName() const;
	int getProjectTimes() const;

private:
	mutable int iTimes;
	int iName;
};
Project::Project()
{
	iTimes = 0;
}
Project::~Project() {}
int Project::getProjectName() const
{
	cout << "天眼工作室" << endl;
	iTimes++;
	return 1;
}
int Project::getProjectTimes() const
{
	return iTimes;
}
int main()
{
	Project *project = new Project();
	for (int i = 0; i < 5; i++) 
	{
		project->getProjectName();
	}
	cout << "调用" << project->getProjectTimes() << "次" << endl;
	delete project;

	getchar();
	return 0;
}

运行结果

天眼工作室
天眼工作室
天眼工作室
天眼工作室
天眼工作室
调用5次

thread_local关键字

     thread_local仅在创建的线程上进行访问,并且在销毁线程时销毁。它主要是解决多线程之间数据不能共享。

#include <iostream>
#include <thread>

using namespace std;

class threadLocalTest {
public:
	threadLocalTest()
	{
		cout << this_thread::get_id()
			<< " " << __FUNCTION__
			<< "(" << (void *)this << ")"
			<< endl;
	}

	~threadLocalTest()
	{
		cout << this_thread::get_id()
			<< " " << __FUNCTION__
			<< "(" << (void *)this << ")"
			<< endl;
	}

	// 线程中,第一次使用前初始化
	void doStart()
	{
	}
};

thread_local threadLocalTest tmpTest;

int main() {
	tmpTest.doStart();
	thread threadName([]() {
		cout << "Thread: "
			<< this_thread::get_id()
			<< " entered" << endl;
		tmpTest.doStart();
	});

	threadName.join();
	getchar();
	return 0;
}

更多《计算机视觉与图形学》知识,可关注下方公众号:

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容) 内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。 立即下载

相关推荐

双向全桥CLLC谐振变换器仿真模型(Simulink仿真实现)

内容概要:本文系统介绍了双向全桥CLLC谐振变换器的Simulink仿真模型,重点阐述了变频控制、闭环仿真及其与多种电力电子拓扑(如维也纳整流器、DAB变换器、图腾柱PFC等)的联合仿真设计。资源包涵盖2.5kW双向全桥LLC、V2G电动汽车充放电系统、三相PFC、多相交错LLC等多种变换器的仿真案例,并深入展示了三电平VIENNA整流器在双闭环PI控制与SVPWM调制策略下,结合上下电容电压差值补偿实现中点电位平衡的先进控制方法。通过仿真验证,该策略不仅有效维持了800V直流母线电压的稳定,还在动态工况下显著提升了电容电压的均衡度,同时保持了较低的输入电流THD,充分体现了SVPWM与中点平衡控制协同优化的技术优势。; 适合人群:具备电力电子与自动控制理论基础,从事新能源发电、电动汽车、工业电源、微电网等领域的研究生、工程师及科研人员。; 使用场景及目标:① 学习并构建高频谐振变换器(如LLC、CLLC)的Simulink仿真模型,掌握其变频与混合控制策略;② 深入理解并应用中点电位平衡、双闭环PI控制、SVPWM调制等核心技术于VIENNA等三电平变换器中;③ 复现高水平期刊论文中的控制算法,服务于科研项目申报、学术论文撰写或工程产品开发。; 阅读建议:该资源为综合性仿真资料库,建议使用者结合自身研究方向(如电动汽车充电、新能源并网)选择对应案例进行精学,重点关注控制策略的设计逻辑、仿真参数的整定方法以及SVPWM与中点平衡的协同机制,并充分利用附带的计算书和参考文献深化理解,以实现从仿真模型到实际工程应用的顺利转化。

刷野打怪上王者·C++篇·第2期·环境配置

参考链接 百度百科 C++环境设置MAC安装XCode、Command Line Tools 好记性不如烂笔头 C++开发环境 还是先说一个什么是集成开发环境(IDE):集成开发环境(IDE),功能齐全,调试功能很强,程序编好后,可以立刻在环境中调试以获得初步测试结果,然后,可以方便地做成beta版形式,拿到实际环境中进一步测试,最后做成软件发行版。 知道了概念就...

CSS360的博客 354

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

全桥LLC谐振(变频+移相混合控制)变换器闭环仿真模型(Simulink仿真实现)

打怪小游戏(C++实现)

废话少说 看代码: #include &lt;iostream&gt;  using namespace std;  double shengmingli=200;//定义主角初始生命力  int gongjili=10;//定义主角初始攻击力  int fangyuli=20;//定义主角初始防御力  int money=200;//定义主角初始金钱数量  bool guogua...

acdsxzsdaffvgscds的博客 2万+

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的另一种解决办法

昨天在关闭了中之后 就能正常打开 FDTD 了,结果今天想开启出现了同样的报错:我猜测昨天能启动的原因在于关闭之后要重启电脑,并且在重启之后我第一时间打开 lumerical 测试因此端口没有被占用,今天是在电脑启动之后一段时间才打开所以又遇到了端口占用的问题。

qq_51404184的博客 9560

Docker+vLLM内网离线部署Qwen3 流程

本文介绍了在CentOS 7系统下进行VLLM容器化部署Qwen3-32B大模型的内网离线方案。首先需准备Nvidia显卡驱动、CUDA 12.4和Docker环境。通过联网机器拉取vllm/vllm-openai镜像并导入内网服务器,同时从魔塔社区下载模型文件。部署时使用docker run命令启动容器,配置了GPU资源、内存共享、端口映射等参数,特别指定了模型路径、并行计算、内存利用率等关键参数。该方案实现了大模型在内网环境的安全高效部署,适用于需要离线运行的AI推理场景。

qq_42881308的博客 1043

刷野打怪上王者·C++篇·第27期·总结

刷野打怪上王者·C++篇·第26期·时间函数&预处理 刷野打怪上王者·C++篇·第25期·动态内存处理 刷野打怪上王者·C++篇·第24期·信号处理 刷野打怪上王者·C++篇·第23期·标准流输入输出 刷野打怪上王者·C++篇·第22期·多线程处理 刷野打怪上王者·C++篇·第21期·模板处理 刷野打怪上王者·C++篇·第20期·命名空间 刷野打怪上王者·C++篇·第19期·...

CSS360的博客 1617

开源大模型“去审查化”技术解析:从LLaMA架构到本地部署与伦理边界

大型语言模型(LLM)基于Transformer架构,通过海量数据训练获得理解和生成自然语言的能力。其核心原理在于自注意力机制对上下文关系的建模。为了确保输出内容的安全与合规,主流模型普遍采用基于人类反馈的强化学习(RLHF)等技术进行安全对齐。这一过程旨在使模型行为符合人类价值观,是AI伦理工程实践的关键环节。然而,在特定研究场景下,如对抗性测试或内容安全算法研究,技术人员需要模拟极端对话以评估系统鲁棒性,这催生了针对“去对齐”或“移除护栏”的技术探索。此类技术通常通过对预训练模型进行反向微调或继续训练来

weixin_33743880的博客 593

刷野打怪上王者·C++篇·第23期·标准流输入输出

参考链接 RUNOOB.COM 标准流输入输出 输入流:字节流从设备(键盘、磁盘驱动器、网络连接)流向内存。输出流:从内存流向设备(显示屏、打印机、磁盘驱动器)。这里主要说明<iostream>中的cin(标准输入流)、cout(标准输出流)、cerr(非缓冲标准错误流)、clog(缓冲标准错误流)对象。 实例程序 #include <iostream>...

CSS360的博客 406

基于强化学习的工业SCR脱硝系统控制算法设计与实现

本文提出了一种基于强化学习的工业SCR脱硝系统智能控制方法。针对SCR系统存在的非线性、大滞后和多变量耦合等控制难点,研究采用混合建模方法构建了精度在5%以内的系统模型,并设计了专门的强化学习环境。该方法通过定义合理的动作空间和状态空间,结合物理约束设计损失函数,利用深度强化学习算法优化氨喷射控制策略。相比传统PID控制,该智能控制器能更好地适应烟气参数波动,实现NOx排放的稳定控制,为工业环保设施提供了更优的自动化解决方案。

huanghm88的专栏 1459

Vienna整流器SVPWM调制:7扇区划分与中点电位平衡的MATLAB/Simulink实现解析

本文深入解析Vienna整流器的SVPWM调制技术,重点介绍7扇区划分与中点电位平衡的MATLAB/Simulink实现方法。通过详细的算法推导和仿真模型构建,帮助工程师掌握整流器闭环控制策略,优化功率转换效率。内容涵盖扇区判断逻辑、矢量作用时间计算及中点电位平衡的PID调节等核心技术要点。

weixin_33937499的博客 387

刷野打怪上王者·C++篇·第13期·类&对象

参考链接 RUNOOB.COM 类 这个其实在前面讲的时候,就已经涉及过类的使用,现在使用文字描述一下。C语言是面向过程的编程,C++是面向对象的过程。类说白了就是用户定义的类型,类中的数据和方法(可以理解为一个个函数)称为类的成员。下面说一下类的使用,类的定义是以class关键字开头,主体是花括号的内容,下面来说明一下: class 类型 { public: ...

CSS360的博客 392

C#上位机国产化适配全方案:兼容统信UOS+鲲鹏/昇腾+国产PLC,可直接交付国企项目

去年下半年,我帮天津滨海新区一家给一汽丰田做配套的汽车零部件国企,完成了3条产线、12套C#上位机的全栈国产化适配。这个项目的背景很典型,也很戳中国企客户的命门:一开始客户找了两家本地的集成商,都没搞定:第一家只会用.NET Framework,根本不知道怎么在统信UOS上跑C#;第二家勉强用.NET Core 3.1跑起来了,但和汇川国产PLC的通信丢包率高达1.2%,产线根本不敢用。我们接手后,用了2个月完成全栈适配:从Windows Server 2019迁移到统信UOS 1070d服务器版,从.NE

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 500

刷野打怪上王者·C++篇·第1期·简介

参考链接 RUNOOB.COM 好记性不如烂笔头 历史 要看历史我认为还是要去百度百科看比较详细(链接),但要简单来说的话,1979年Bjame Sgoustrup在Bell实验室设计开发的,在1983年更名为C++。其中对C++发展很重要的一件事,就是Alexander stepanov创建了标准模板库(Standard Template Library,STL),并加入到C+...

CSS360的博客 384

9、傅里叶变换:连续时间与离散时间信号分析的核心工具

本文深入探讨了傅里叶变换在连续时间和离散时间信号分析中的核心作用,详细介绍了连续时间傅里叶变换(CTFT)和离散时间傅里叶变换(DTFT)的定义、性质及其应用。文章涵盖了傅里叶级数到傅里叶变换的推导过程、常见变换对、系统分析中的关键性质,并讨论了采样后频谱的周期延拓与混叠问题。此外,还展示了傅里叶变换在滤波器设计、通信系统调制解调等实际场景中的应用,最后展望了其在图像处理、生物医学等领域的广阔前景。

jump7的博客 68

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

刷野打怪上王者·C++篇·第15期·重载操作

参考链接 RUNOOB.COM 重载操作 重载操作分为重载运算和重载函数。 重载函数 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些形式参数(参数个数、数据类型或者顺序)不同。不能通过返回类型来重载函数。 #include <iostream> using namespace std; class dataDisposeClass { pu...

CSS360的博客 376

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

刷野打怪上王者·C++篇·第22期·多线程处理

参考链接 RUNOOB.COM 多线程处理 在电脑中可以进行多任务处理,其中多任务的处理方式分为两种:多进程和多线程。多进程是程序的并发执行;多线程是同一程序判断并发执行。 实例程序 #include <iostream> #include <utility> #include <thread> #include <chrono>...

CSS360的博客 364

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

刷野打怪上王者·C++篇·第6期·变量&常量

参考链接 RUNOOB.COM 变量 其实变量就是一个名字,代指的可操作存储区的名称。也不是随便起个名字就可以,在C++中变量的名称由字母、数字和下划线组成。但必须以字母或下划线开头,并且区分字母的大小写。 估计大家对上一节讨论的字符数不是很清楚,一个字符对应8位(每位对应的就是0或者1)。我们拿一个特殊的类型来进行说明,float类型1位符号、8位指数、23位小数,下面拿...

CSS360的博客 359

刷野打怪上王者·C++篇·第3期·HelloWorld

参考链接 RUNOOB.COM 好记性不如烂笔头 示例代码 我们还是先上HelloWorld代码,然后在慢慢细聊一下: #include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; return 0; } 结果:...

CSS360的博客 336

刷野打怪上王者·C++篇·第25期·动态内存处理

参考链接 RUNOOB.COM 动态内存处理 为什么会有这么一个概念呢?我们在写程序的时候,有的时候很难提前预知定义的变量需要申请多少内存,只有在程序运行的过程才能够确定。需要说明一点,在C++中内存由两部分组成:栈和堆。其中,函数内声明的所有变量使用栈来存储;对于程序未使用的可用于动态分配的内存则有堆完成。 要进行动态申请内存,C++提供了空间分配new运算符,还提供了...

CSS360的博客 330

刷野打怪上王者·C++篇·第5期·数据类型

参考链接 RUNOOB.COM 数据类型说明 我们思考一下,为什么会 出现数据类型。个人理解,首先作为一个好的程序员,就必须在实现特定功能的前提下,要保证较小的时间复杂度和空间复杂度。要做实现上面说的,当然最牛的就是算法。其实算法就是解决问题的一种方法,不过就是这个方法更高效。但要玩算法,最基本就是要合理申请数据空间。 上面知道了为什么,下面我们开始聊实际的。在C++的数据...

CSS360的博客 319

刷野打怪上王者·C++篇·第8期·运算操作

参考链接 RUNOOB.COM 运算操作 上几篇已经讲了C++中变量和数据存储,后面我们将讲对里面的数据进行操作需要C++提供了哪些运算符。C++中常见的运算符:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、杂项运算符。 算术运算符:包括+(加)、-(减)、*(乘)、/(除)、++(自加)、--(自减)。下面我们通过程序来进行说明: #include <ios...

CSS360的博客 319

刷野打怪上王者·C++篇·第21期·模板处理

参考链接 RUNOOB.COM 模板处理 函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。模板分为函数模板和类模板。 函数模板的定义方式 template <class type1, class type2, ...> 返回类型 函数名(参数列表) { /*核...

CSS360的博客 318

刷野打怪上王者·C++篇·第26期·时间函数&预处理

参考链接 RUNOOB.COM 时间函数&预处理

CSS360的博客 313
上一篇: 刷野打怪上王者·C++篇·第6期·变量&常量
下一篇: 刷野打怪上王者·C++篇·第8期·运算操作
元宇宙MetaAI
博客等级 码龄10年 331粉丝 333原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值