【发布时间】:2020-02-07 23:51:37
【问题描述】:
静态变量在程序开始时初始化,如here中所述,静态变量的初始化顺序是未定义的。因此,用另一个静态变量初始化一个静态变量可能会导致程序崩溃。
在函数中声明的“本地”静态变量也是如此吗?
使用全局声明的静态变量来初始化“本地”静态变量是否安全?
如果我在同一个局部范围内有多个静态变量,使用早期声明的变量来初始化晚期声明的变量是否安全?
【问题讨论】:
-
当执行到达该行时,会初始化动态初始化的局部静态变量
-
所有不是用单个翻译单元定义的局部变量的静态存储持续时间变量都按照它们在翻译单元中定义的顺序创建和销毁。仅当您有多个翻译单元和静态存储持续时间变量取决于另一个翻译单元中的静态存储持续时间变量时,才会出现链接中描述的问题,因为您无法控制首先初始化哪个翻译单元。这不是函数中的静态变量的问题。一方面,该功能不能跨多个翻译单元拆分。
-
@user4581301 你的第一句话只适用于动态初始化。静态初始化首先发生,例如在文件范围
int a = foo(); int b = 5; int c = bar();中,b在执行foo期间保证具有值5 -
谢谢,@M.M 我怀疑类似的事情(如果编译器知道该变量的内容,为什么不在编译时将其烧录?)但我找不到确认。现在我已经花了更多时间and found it 我对我提出的答案进行了一些修正。
标签: c++ compilation