const 变量何时初始化

Tri*_*tos 0 c c++ variables constants

何时以及如何在 C/C++ 中初始化 const 变量?我对特定类型很好奇:

1) const static member of a class
2) function const local variable
3) const global variable
Run Code Online (Sandbox Code Playgroud)

我的意思当然是应用程序运行时而不是初始化它们的源代码方式。

Mik*_*our 5

1) 类的 const 静态成员

如果它是一个用常量表达式初始化的简单类型,那么它在静态初始化阶段初始化,在任何用户代码运行之前。

否则,如果它是具有非平凡构造函数的类类型,或者具有非常量初始化器,则在动态初始化阶段对其进行初始化。这将在调用同一翻译单元中定义的任何函数之前发生;但也有潜在的死亡陷阱:

  • 在其他静态变量初始化之前,它可能不会发生;如果他们的构造函数访问它,你会得到邪恶的错误。
  • main如果它在不同的单元中定义,它可能不会在开始之前发生。
  • 如果您从未在同一单元中调用任何函数,则它可能根本不会发生。

2)函数const局部变量

如果它是静态的,那么它会在程序第一次达到其定义时进行初始化。如果它是自动的,则每次程序到达它时都会对其进行初始化,并在超出范围时将其销毁。

3) const 全局变量

和第一个一样。两者都有静态存储持续时间,因此根据相同的规则进行初始化和销毁​​。

笔记:

由于您问的是两种不同的语言:在 C 中,没有“动态初始化”这样的东西,并且所有非局部静态变量都在任何用户代码运行之前被初始化。

存在const对何时或如何初始化变量没有影响。