首页/新闻资讯/正文详情

capl--static

发布时间:2026/9/25 11:41:32 来源:云帆数科 栏目:资讯中心
capl--static
一、static 总览使用位置核心作用关键行为类的静态成员变量类级共享数据所有对象共享一份类外必须定义类的静态成员函数类级工具方法无this指针通过类名调用函数内的静态局部变量值持久化只初始化一次调用间保持值二、类中的静态成员变量2.1 基本用法声明在类内用static声明定义必须在类外用类型 类名::变量名 初值;分配内存class Counter { private: static int count; // 声明这个变量属于类不属于任何对象 public: Counter() { count; } ~Counter() { count--; } int GetCount() { return count; } // 所有对象访问的是同一个 count }; int Counter::count 0; // 必须定义并初始化如果不写类外定义会怎样链接时报错undefined reference to Counter::count。类内只是声明不分配内存2.2 内存模型Counter a, b, c; // 三个对象成员存储位置份数count(static)全局数据区1 份所有对象共享其他普通成员每个对象内部每对象 1 份2.3 典型用途用途 1对象计数器class ECU { private: static int activeInstances; public: ECU() { activeInstances; } ~ECU() { activeInstances--; } static int GetActiveCount() { return activeInstances; } }; int ECU::activeInstances 0; // 随时查询当前有多少个 ECU 对象存活 write(Active ECUs: %d, ECU::GetActiveCount());用途 2全局配置参数class AppConfig { public: static int baudRate; static char logPath[256]; }; int AppConfig::baudRate 500000; char AppConfig::logPath[256] C:\\logs\\; // 任何地方直接读写 AppConfig::baudRate 250000;用途 3共享资源句柄class Logger { private: static dword fileHandle; // 所有日志对象写入同一个文件 public: static bool Open(char path[]); static void Write(char msg[]); static void Close(); }; dword Logger::fileHandle 0;三、类中的静态成员函数3.1 基本用法class MathUtils { public: static float ToFahrenheit(float celsius); static float ToCelsius(float fahrenheit); }; float MathUtils::ToFahrenheit(float celsius) { return celsius * 9.0 / 5.0 32.0; } // 调用直接用类名无需创建对象 float f MathUtils::ToFahrenheit(25.0);3.2 调用方式对比MathUtils::ToFahrenheit(25.0); // ✅ 推荐类名调用 MathUtils util; util.ToFahrenheit(25.0); // ⚠️ 也能用对象调但不推荐3.3 重要限制静态成员函数没有this指针因此能做什么不能做什么✅ 访问静态成员变量❌ 访问普通成员变量✅ 调用其他静态成员函数❌ 调用普通成员函数✅ 访问传入的参数❌ 使用thisclass Test { private: int normalVal; static int staticVal; public: static void Func() { staticVal 10; // ✅ 可以 // normalVal 5; // ❌ 错误没有 this找不到属于哪个对象 } };四、函数内的静态局部变量4.1 基本用法在函数内部用static声明的变量只初始化一次值在函数调用间保留。void CountCalls() { static int times 0; // 只在第一次调用时初始化为 0 times; write(Called %d times, times); } on key a { CountCalls(); // 第 1 次Called 1 times CountCalls(); // 第 2 次Called 2 times CountCalls(); // 第 3 次Called 3 times }4.2 与普通局部变量的对比void NormalVar() { int n 0; // 每次调用都重新初始化为 0 n; write(Normal: %d, n); // 永远输出 1 } void StaticVar() { static int s 0; // 只在第一次调用时初始化为 0 s; write(Static: %d, s); // 输出 1, 2, 3... }普通局部变量静态局部变量初始化每次调用都初始化只初始化一次生命周期函数返回即销毁直到测量结束作用域函数内部函数内部值在调用间不保留保留4.3 典型用途用途 1调用计数器void LogError(char msg[]) { static int errorCount 0; errorCount; write(Error #%d: %s, errorCount, msg); }用途 2模拟“仅执行一次”的初始化void EnsureInitialized() { static int done 0; if (!done) { done 1; // 这里的代码只会执行一次 write(System initialized.); } }用途 3缓存计算结果float GetExpensiveValue() { static float cachedResult -1; static int cached 0; if (!cached) { cached 1; cachedResult 3.1415926; // 模拟耗时计算 } return cachedResult; }五、三种 static 的对比总结class Demo { private: static int shared; // ① 类静态成员变量所有对象共享 public: static void Func() // ② 类静态成员函数无 this类名调用 { static int local 0; // ③ 函数内静态局部变量值持久 local; shared; } }; int Demo::shared 0; // ① 的类外定义类型声明位置调用/访问方式生命周期共享范围① 静态成员变量类内类名::变量名或对象.变量名测量期间该类的所有对象② 静态成员函数类内类名::函数名()或对象.函数名()随时可调用无this只能访问静态成员③ 静态局部变量函数内仅在函数内部测量期间函数的各次调用之间

相关推荐

CAPL实战:动态调节ID范围报文发送周期,精准控制CAN总线负载率
CAPL实战:动态调节ID范围报文发送周期,精准控制CAN总线负载率

1. 为什么需要动态调节CAN总线负载率 在汽车电子测试中,模拟真实场景下的总线负载压力是验证ECU稳定性的关键环节。想象一下城市交通高峰期,如果所有车辆都以固定速度行驶,要么造成拥堵(负载过高),要么浪费… · 2026/9/24 23:31:45

SpringBoot深度历险:快速上手Java核心!
SpringBoot深度历险:快速上手Java核心!

大家可以回想一下,当初我们最开始学习Java的时候,搭建一个Web所需要的步骤。。。1、配置web.xml,加载spring和spring mvc2、配置数据库连接、配置spring事务3、配置加载配置文件的读取,开启注解4、配置日志文件...5、配置完成之后… · 2026/9/25 7:02:12

自己动手写一个spring之IOC_4
自己动手写一个spring之IOC_4

写在前面 本文继续完善IOC部分内容,主要是增加beanfactory相关内容,使其变得更加丰满,以及增加事件通知相关内容,从而能够更好的感知程序执行的进程,以及时做出需要执行的动作。 源码 。 1:增强beanfacto… · 2026/9/22 17:53:47

截图太多风格乱?用智能体工作台从11张截图到统一海报的视觉重构实践
截图太多风格乱?用智能体工作台从11张截图到统一海报的视觉重构实践

云栖大会布展前夜,我对着电脑里那11张截图,差点把咖啡喝出了牢骚的味道。作品运行界面、后台数据页、现场参考照,尺寸从1920一直乱到手机竖屏,色温有冷有暖,信息密度更是能劝退强迫症。而展位这边明确要求:… · 2026/9/26 11:34:22

Hermes Agent vs. OpenClaw 记忆系统对比:TaoToken 统一 Key 下配置骨架与验证
Hermes Agent vs. OpenClaw 记忆系统对比:TaoToken 统一 Key 下配置骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:34:22

Excel合并单元格全解析:从基础操作到自动化处理与避坑指南
Excel合并单元格全解析:从基础操作到自动化处理与避坑指南

1. 合并单元格到底在解决什么问题1.1 从一张报表说起:为什么我们总想合并单元格做报表的人大概都有过这种经历:一张销售汇总表,A列是区域,B列是城市,C列是销售额。华东区下面挂了上海、杭州、南京三个城市,… · 2026/9/26 11:34:22

实时音频滤镜框架Instafilter:从接入到避坑的实践指南
实时音频滤镜框架Instafilter:从接入到避坑的实践指南

简介:一份用于学习 Swift 编程的 Instafilter 实时滤镜应用工程示例,非常适合想在 iOS 开发中掌握 Core Image 与相机使用时序的开发者,可快速体验类似 Instagram 风格的实时滤镜效果。资源压缩包仅 13KB,共十二个文件&#xff0c… · 2026/9/26 11:34:22

如何写好 Skill:一份来自腾讯团队的终极实战经验手册(TaoToken 配置与验证篇)
如何写好 Skill:一份来自腾讯团队的终极实战经验手册(TaoToken 配置与验证篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:34:16

Service-as-a-Software 实战:用 AI Agent Harness 重构 SaaS 商业模式的配置骨架
Service-as-a-Software 实战:用 AI Agent Harness 重构 SaaS 商业模式的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:34:16

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码