发布时间:2026/8/27 13:47:46
c/c++--静态变量和静态函数(static) 目录1 c静态函数和静态变量1.1 C静态成员函数1.1.1定义与基本语法1.1.2 不依赖于实例1.1.3 访问限制1.1.4共享数据1.1.5 作用域与命名1.1.6 工厂函数和工厂方法常用途​​​1.2 c静态函数)1.3c静态变量2 c语言静态变量2.1 静态局部变量和静态全局变量2.2 静态函数1 c静态函数和静态变量1.1 C静态成员函数1.1.1定义与基本语法在C中使用static关键字定义静态成员函数。静态函数的定义如下class MyClass { public: static void myStaticFunction() { // 函数体 } };1.1.2 不依赖于实例成员函数变量静态函数和成员变量不需要类的实例就可以被调用。这意味着你可以在没有创建对象的情况下直接通过类名调用它。这在需要执行与具体对象无关的操作时非常有用。MyClass::myStaticFunction(); // 直接通过类名调用#include iostream using namespace std; class MyClass { private: static int staticVar; // 私有静态变量 public: // 公共静态函数用于访问静态变量 static int getStaticVar() { return staticVar; } // 公共静态函数用于修改静态变量 static void setStaticVar(int value) { staticVar value; } }; // 定义静态变量 int MyClass::staticVar 10; int main() { // 使用静态方法访问静态变量 std::cout MyClass::getStaticVar() std::endl; // 修改静态变量 MyClass::setStaticVar(20); std::cout MyClass::getStaticVar() std::endl; return 0; }1.1.3 访问限制静态函数只能访问静态成员变量和其他静态成员函数不能访问实例成员非静态成员。这是因为静态函数的上下文并不与任何具体实例关联。class MyClass { public: static int staticVar; int instanceVar; static void myStaticFunction() { staticVar 10; // 可以访问静态成员 // instanceVar 5; // 错误无法访问实例成员 } };1.1.4共享数据由于静态成员函数和静态成员变量属于类本身而不是某个特定对象所以它们可以在所有对象之间共享。这意味着所有对象共享同一个静态变量的值。class MyClass { public: static int count; MyClass() { count; } static void printCount() { std::cout Count: count std::endl; } }; int MyClass::count 0; // 静态变量初始化 int main() { MyClass obj1; MyClass obj2; MyClass::printCount(); // 输出 Count: 2 }1.1.5 作用域与命名静态函数的作用域一般限于定义它的类但可以通过类名进行访问。这使得它可以明确地标识出调用的是哪个类的静态函数避免命名冲突。1.1.6 工厂函数和工厂方法常用途工厂函数静态函数常用于实现不依赖于实例的工厂函数比如数学计算等。工厂函数在MathUtil类中静态函数squareRoot和power用于执行数学计算无需创建类的实例。工厂函数实例#include iostream #include cmath class MathUtil { public: // 静态函数计算平方根 static double squareRoot(double number) { return std::sqrt(number); // 返回平方根 } // 静态函数计算幂 static double power(double base, double exponent) { return std::pow(base, exponent); // 返回 base 的 exponent 次方 } }; int main() { double sqrtValue MathUtil::squareRoot(16.0); // 计算 16 的平方根 double powerValue MathUtil::power(2.0, 3.0); // 计算 2 的 3 次方 std::cout Square root of 16: sqrtValue std::endl; // 输出 4 std::cout 2 raised to the power of 3: powerValue std::endl; // 输出 8 return 0; }工厂方法静态成员函数可以用作工厂方法用于创建类的实例并返回。工厂方法在Circle类中静态成员函数createCircle用于创建Circle实例构造函数被私有化以防止直接实例化确保通过工厂方法来控制实例的创建。工厂方法实例#include iostream class Circle { private: double radius; // 构造函数私有化防止外部直接创建实例 Circle(double r) : radius(r) {} public: // 静态工厂方法创建 Circle 实例 static Circle createCircle(double r) { return Circle(r); // 返回 Circle 实例 } double area() const { return 3.14159 * radius * radius; // 计算圆的面积 } }; int main() { // 使用工厂方法创建 Circle 实例 Circle circle Circle::createCircle(5.0); // 创建半径为5的圆 std::cout Area of the circle: circle.area() std::endl; // 输出圆的面积 return 0; }​​​1.2 c静态函数)1.3c静态变量静态成员变量C中可以在类中定义静态成员变量这些变量属于类而不是某个实例。所有实例共享同一个静态成员变量。静态局部变量和C语言中的静态局部变量类似静态局部变量在函数中定义后只会初始化一次并在函数调用结束后保留其值。#include iostream class MyClass { public: static int count; // 静态成员变量 MyClass() { count; } static void printCount() { std::cout Count: count std::endl; } }; int MyClass::count 0; // 静态变量初始化 int main() { MyClass obj1; MyClass obj2; MyClass::printCount(); // 输出 Count: 2 return 0; }2 c语言静态变量2.1静态局部变量和静态全局变量C 语言中使用static修饰一个全局变量会将其作用域限制在定义它的文件内。也就是说其他文件无法访问这个变量如果使用static修饰一个局部变量主要有以下几个作用静态存储期局部变量会在程序开始时分配内存并在整个程序运行期间保持该内存的有效性而不是在每次进入该函数时分配和释放。这意味着该变量的生命周期延续至程序结束。保持值每次调用该函数时静态局部变量不会被重新初始化而是保持上一次函数调用结束时的值。这使得它可以用于在多次函数调用之间保留状态。作用域静态局部变量的作用域仍然局限于定义它的函数内外部无法直接访问。#include stdio.h void counter() { static int count 0; // 静态局部变量 count; printf(Count: %d\n, count); } int main() { counter(); // 输出: Count: 1 counter(); // 输出: Count: 2 counter(); // 输出: Count: 3 return 0; }在这个例子中count是一个静态局部变量它在每次调用counter()时保持其值。2.2 静态函数限制作用域静态函数的作用域仅限于定义它的源文件。这意味着其他文件无法调用这个函数有助于避免命名冲突。普通成员函数 隐含一个this参数知道自己操作哪个对象static成员函数 没有对象不需要this。内容存放位置是否有this普通成员变量对象内部堆/栈中的对象空间—静态成员变量静态区—普通成员函数代码代码区有this静态成员函数代码代码区没有this

相关新闻

2026/8/27 13:47:46

解密Prompt系列37. RAG之前置决策何时联网的多种策略

前言 之前我们分别讨论过RAG中的召回多样性,召回信息质量和密度,还有calibration的后处理型RAG。前置判断模型回答是否要走RAG的部分我们之前只提及了自我矛盾和自我拒绝者两个方案。这一章我们再补充几种RAG前置判断方案。 每种方案我们会挑1篇论文并主…

2026/8/27 13:47:46

使用Labelme构建高质量目标检测数据集:从路面缺陷检测实践出发

简介:在计算机视觉领域,目标检测是识别图像中特定对象并定位其位置的核心技术,广泛应用于工业质检、自动驾驶和安防监控等场景。其原理通常基于深度学习模型,通过大量标注数据学习目标的特征表示。高质量的数据集是模型性能的基石…

2026/8/27 14:33:02

【AI大模型】从MCP到A2A,AI智能体应用的进化之路

前言 AI智能体虽然本质上就是一个控制LLM来解决问题的代理系统。但这并不影响其成为大模型时代应用的最佳方式。特别是在今年DeepSeek和Manus爆火后,AI智能体更是被认为将迎来发展的黄金时期。但AI智能体也存在很多发展的瓶颈。例如:应用程序调用、跨平台…

2026/8/27 14:33:02

深入理解循环神经网络:NLP领域的基石,大模型学习的必经之路!

前言 有了上文的铺垫,本节进入循环神经网络(Recurrent Neural Network)。卷积神经网络主要解决计算机视觉领域的问题,而循环神经网络主要解决自然语言处理(NLP)领域的问题。 自然语言应该是人工智能中最难的,首先输入就是不确定的&#xff0c…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…