static

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

含义:

  1. 性能:无每次函数调用检查/赋值的开销。
  2. 语义 :静态对象在程序开始前已初始化,即使函数没被调用也存在。其实局部 static 对象即使函数未被调用,是否在程序启动时初始化?对于常量初始化,C++ 标准允许在静态初始化阶段进行,因此其初始化可能发生在 main 之前,即使函数从未被调用。但它的名字作用域仍限于函数内,生命周期持续到程序结束。
  3. C 语言:要求常量初始化,因此没有动态初始化,简化实现,适合嵌入式/系统编程。
  4. C++:区分常量初始化和动态初始化。常量初始化可以提前,动态初始化延迟到首次 odr-use/控制流到达,以支持局部惰性和依赖运行时。
相关推荐
音草1 小时前
C++ 继承详解:从概念到菱形继承
c++
weixin_307779131 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
鸽鸽程序猿1 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 个人资料管理的需求分析与接口设计
java·开发语言·交友
1024奇点1 小时前
【仓颉语言入门 · 第二篇 第 8 课】
开发语言·数据库·ide·mysql·开源
gopher95111 小时前
RUST:序列化与反序列化 serde + derive 详解
开发语言·后端·rust
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》Trae IDE 开发环境搭建与依赖管理
c++·ide·语言模型
H.莓飛2 小时前
【Linux】自主 Shell
linux·运维·服务器·c语言·开发语言·visual studio
熊猫钓鱼>_>2 小时前
Kotlin Multiplatform for OpenHarmony 实战:kotlinx-coroutines 结构化并发适配
开发语言·kotlin·agent·harmonyos·openharmony·适配·华为云码道
沫璃染墨2 小时前
《Qt从零入门系列(十四):QThread多线程详解——从线程创建到客户端阻塞处理》
开发语言·c++·笔记·qt·ui·交互·线程