不需要时进行静态初始化

时间:2014-07-03 11:18:04

标签: c++ initialization

引用N3797 C ++ 14最终工作草案的3.6.2 / 3:

  

允许实现执行a的初始化   静态存储持续时间为静态的非局部变量   初始化即使不需要进行这样的初始化也是如此   静态地,只要

     

- 初始化的动态版本不会更改该值   在初始化之前的任何其他命名空间作用域对象,   和

     

- 初始化的静态版本产生相同的值   由动态生成的初始化变量   如果所有变量不需要初始化,则初始化   静态地动态初始化。

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

如果可能,请通过示例描述后一点。

1 个答案:

答案 0 :(得分:3)

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

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}}。