引用N3797 C ++ 14最终工作草案的3.6.2 / 3:
允许实现执行a的初始化 静态存储持续时间为静态的非局部变量 初始化即使不需要进行这样的初始化也是如此 静态地,只要
- 初始化的动态版本不会更改该值 在初始化之前的任何其他命名空间作用域对象, 和
- 初始化的静态版本产生相同的值 由动态生成的初始化变量 如果所有变量不需要初始化,则初始化 静态地动态初始化。
所有变量对一个特定变量的初始化有什么作用?
如果可能,请通过示例描述后一点。
答案 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}}。