同一函数内静态局部变量的初始化顺序是否有明确保证?
函数内静态局部变量的初始化顺序是否有明确保证?
这个问题问到点子上了!咱直接给你明确答案:同一函数内定义的静态局部变量,初始化顺序是有标准明确保证的。
具体来说,C++标准规定:在同一个函数(或代码块)里的静态局部变量,它们的初始化顺序严格遵循代码中出现的先后顺序——当函数第一次被调用,执行到这些变量的定义语句时,会按书写顺序依次完成初始化,前一个变量初始化完成后,才会开始初始化下一个。
拿你给出的代码举例:
void f() { static A a; static B b; }
当f()第一次被调用时,会先初始化a,等a的构造(如果是类对象)或者初始化操作完全完成后,才会去初始化b,这个顺序是绝对不会颠倒的。反过来,如果把b写在a前面,那初始化顺序就变成b先、a后,完全跟着代码里的定义顺序走。
这里要和全局静态变量的情况区分开:全局静态变量的初始化顺序是未定义的(不同编译单元之间),但函数内的静态局部变量因为属于同一个函数的作用域,标准把它们的初始化顺序绑定到了代码书写顺序上,不会出现歧义。
内容的提问来源于stack exchange,提问作者Chen OT
相关产品推荐
相关产品推荐

