gpt4 book ai didi

c++ - 静态变量会不会进行多次初始化?

转载 作者:行者123 更新时间:2023-11-30 01:10:15 24 4
gpt4 key购买 nike

考虑

//#include  stuff
const int x=5;
.
.
int main()
{
static int var=x;
.
.
}

如果我没理解错的话,

  • 无论是否指示任何初始化,静态变量都是零初始化的,因此单独使用 static int var; 会将 var 设置为零,并且 static int var= x; 首先也会将 var 设置为 0
  • 现在 static int var=x; 执行常量表达式初始化,IIRC 在零初始化之后完成。

静态变量是否多次初始化——尽管这句话自相矛盾?

最佳答案

C++14 状态:

3.6.2 Initialization of non-local variables

...

Variables with static storage duration (3.7.1) or thread storage duration (3.7.2) shall be zero-initialized (8.5) before any other initialization takes place.

好的,这似乎是这个问题的基础。

Constant initialization is performed:

[ ... ]

接下来是常量初始化的定义。长话短说,const int x=5;static int var=x;似乎都满足常量初始化的要求。

因此,基于此,这似乎表明“静态变量[被]初始化了多次”。

奋进:

Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. Static initialization shall be performed before any dynamic initialization takes place.

因此,零初始化和常量初始化,这里的主题“多重”初始化,必须发生在动态初始化之前。

据此,我得出结论,尽管从技术上讲,“静态变量 [被] 多次初始化”的说法是正确的,但我看不出有任何方法可以实际观察到它。你需要动态初始化来观察一些东西。在静态初始化完成之前,动态初始化不会发生。

由此看来,在我看来,3.6.2 中定义的术语“静态初始化”与“静态初始化失败”中的“静态初始化”并不完全相同。在我看来,“静态初始化失败”真的应该被称为“动态初始化失败”。

关于c++ - 静态变量会不会进行多次初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com