You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数内部声明的static静态变量运行行为是怎样的?

static局部变量的运行逻辑说明

这两个代码片段的表现差异完全符合C++的标准规则,核心区别在于变量的声明次数和static局部变量的初始化时机:

  • 函数内部的static局部变量,初始化操作仅会在函数第一次被调用、执行到该声明语句时运行一次,后续所有函数调用都会跳过该初始化语句,变量的内存地址和值会在整个程序生命周期内保留,不会重新分配或赋值。
  • 同一作用域内,相同变量名仅允许声明一次,重复声明会触发编译报错。

第一段代码可正常运行的原因

你写的insert函数内仅声明了一次static int jo,完全符合作用域声明规则:

  1. 第一次调用insert(1)时,程序首次执行到static int jo = k;语句,完成静态变量jo的初始化,值为1,输出结果1。
  2. 第二次调用insert(2)时,程序会直接跳过静态变量的初始化语句,不会重新给jo赋值,也不会为它开辟新的内存空间,jo仍然保留第一次初始化的1,因此输出还是1。

第二段代码报重定义错误的原因

你在main函数的同一个作用域内,连续两次声明了同名变量static int jo,违反了C++的单一定义规则,编译器在编译阶段就能识别到这个错误,直接抛出重定义提示,根本不会进入运行阶段。
这个报错和变量是否是static无关:哪怕你把两个声明前的static去掉,同一个作用域内两次定义int jo也会触发完全相同的报错。

内容的提问来源于stack exchange,提问作者user15071942

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:36:08