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

同一函数内静态局部变量的初始化顺序是否有明确保证?

函数内静态局部变量的初始化顺序是否有明确保证?

这个问题问到点子上了!咱直接给你明确答案:同一函数内定义的静态局部变量,初始化顺序是有标准明确保证的。

具体来说,C++标准规定:在同一个函数(或代码块)里的静态局部变量,它们的初始化顺序严格遵循代码中出现的先后顺序——当函数第一次被调用,执行到这些变量的定义语句时,会按书写顺序依次完成初始化,前一个变量初始化完成后,才会开始初始化下一个。

拿你给出的代码举例:

void f() { static A a; static B b; }

当f()第一次被调用时,会先初始化a,等a的构造(如果是类对象)或者初始化操作完全完成后,才会去初始化b,这个顺序是绝对不会颠倒的。反过来,如果把b写在a前面,那初始化顺序就变成b先、a后,完全跟着代码里的定义顺序走。

这里要和全局静态变量的情况区分开:全局静态变量的初始化顺序是未定义的(不同编译单元之间),但函数内的静态局部变量因为属于同一个函数的作用域,标准把它们的初始化顺序绑定到了代码书写顺序上,不会出现歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:21