不需要时进行静态初始化

Static initialization when it is not required

本文关键字:静态 初始化 不需要      更新时间:2023-10-16

引自N3797 c++ 14最终工作草案3.6.2/3:

允许一个实现执行a的初始化具有静态存储持续时间的非局部变量初始化,即使这样的初始化不是必需的静态地,假设

-初始化的动态版本不改变值命名空间作用域的任何其他对象的初始化,和

—初始化的静态版本产生与初始化的变量将由动态的如果所有变量不需要初始化,则初始化静态初始化

所有变量对一个特定变量的初始化有什么要求?

如果可能,用例子描述后一点

当一个变量的初始化项引用另一个变量时,这一点很重要。

constexpr int f(int);
extern const int a = f(1); // not required to be statically initialized
extern const int b = a; // also not required to be statically initialized
constexpr int f(int x) { return x; }

现在假设实现选择静态初始化b,但动态初始化a。在这种情况下,b的初始化会先于a进行。您所询问的文本解释说,这不允许实现将b初始化为零:即使b先初始化,其值也必须是f(1),即1