转载-C/C++中static的用法
1、什么是static?
static是C/C++中常用的修饰符,它可以用来控制变量或函数的存储方式和可见性。
(1)static的引入
在函数内部定义的变量,当程序执行到它的定义处时,就会在栈上分配空间,函数在栈上分配的空间在此函数执行结束后,就会释放掉,如果想将函数中的某个变量的值保存到下一次函数调用,可以通过static关键词实现,另外,在C++中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,要求此成员隐藏在类的内部,对外不可见时,可以将其定义为静态数据。
(2)静态数据的存储
全局(静态)存储区:分为.data段和.bss段,.data段(全局初始化区)用来存放初始化的全局变量和静态变量,.bss段(全局未初始化区)用来存放未初始化的全局变量和静态变量,程序运行结束时自动释放,其中.bss段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。
C++中static的内部实现机制:静态数据成员要在程序一开始运行时就必须存在,因为函数在程序运行中调调用,所以静态数据成员不能在任何函数内分配空间和初始化。
static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间,静态数据成员按定义出现的先后顺序依次初始化,注意静态成员嵌套时,要保证所嵌套的成员已经初始化了,消除时的顺序是初始化的反顺序。
2、C/C++中static的作用
(1)常见作用
- 在修饰变量的时候,static修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,只到程序运行结束以后才会释放;
- static修饰全局变量的时候,这个全局变量只能在本源文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以;
- static修饰一个函数的时候,这个函数只能在本源文件中调用,不能被其它文件调用,static修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存,定义时未给初始值的话,初始化的时候自动清0;
- 不想被释放的时候,可以使用static修饰,比如说某个变量在函数调用结束后不想被释放,在定义变量时,可以使用static修饰;
- 考虑到数据的安全性,当程序想要使用全局变量的时候应先考虑使用static修饰变量。
(2)静态变量与普通变量
(3)静态局部变量
3、static常见用法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2019-08-30 git安装和使用配置