static

局部 static 在函数内,为什么不是每次执行?因为 static 存储期,不是自动存储期,初始化只发生一次,这是语言语义。为什么不是运行时每次执行?因为 static 关键字意味着存储和生命周期是静态的,且初始化只发生一次。在常量表达式情况下,编译器知道值,可以直接把值放在目标文件的数据段,不需要在函数入口生成赋值语句。

含义:

  1. 性能:无每次函数调用检查/赋值的开销。
  2. 语义 :静态对象在程序开始前已初始化,即使函数没被调用也存在。其实局部 static 对象即使函数未被调用,是否在程序启动时初始化?对于常量初始化,C++ 标准允许在静态初始化阶段进行,因此其初始化可能发生在 main 之前,即使函数从未被调用。但它的名字作用域仍限于函数内,生命周期持续到程序结束。
  3. C 语言:要求常量初始化,因此没有动态初始化,简化实现,适合嵌入式/系统编程。
  4. C++:区分常量初始化和动态初始化。常量初始化可以提前,动态初始化延迟到首次 odr-use/控制流到达,以支持局部惰性和依赖运行时。
相关推荐
冻柠檬飞冰走茶4 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing034 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
雪落漂泊4 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
波力海苔夹心脆6755 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩6 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
Hhy_11078 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
starzy19908 小时前
深入理解Scala函数定义:从方法到函数的类型跨越
开发语言·scala
starzy19908 小时前
深入理解Scala递归函数:从栈溢出到尾调用优化
开发语言·scala
三*一8 小时前
Mapbox‑GL JS 多边形折点编辑工具:实现原理、功能拆解与踩坑总结
开发语言·javascript·ecmascript
青少儿编程课堂8 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛