static

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

含义:

  1. 性能:无每次函数调用检查/赋值的开销。
  2. 语义 :静态对象在程序开始前已初始化,即使函数没被调用也存在。其实局部 static 对象即使函数未被调用,是否在程序启动时初始化?对于常量初始化,C++ 标准允许在静态初始化阶段进行,因此其初始化可能发生在 main 之前,即使函数从未被调用。但它的名字作用域仍限于函数内,生命周期持续到程序结束。
  3. C 语言:要求常量初始化,因此没有动态初始化,简化实现,适合嵌入式/系统编程。
  4. C++:区分常量初始化和动态初始化。常量初始化可以提前,动态初始化延迟到首次 odr-use/控制流到达,以支持局部惰性和依赖运行时。
相关推荐
codigger6 小时前
ObjectSense:一门千行内核、把可靠性写进骨子里的面向对象脚本语言
开发语言·编程·编程语言
小小龙学IT7 小时前
Boost.Interprocess 开源 C++ 进程间通信库深度解析
c++·开源
倒头就睡的小比特6 天前
算法竞赛C++常用的STL
c++·算法
weilx12346 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!6 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读6 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
Smileyqp沛沛6 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车6 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光6 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控