引用N3797 C++14最后工作草案3.6.2/3的话:
允许实现以静态初始化的形式执行具有静态存储持续时间的非局部变量的初始化,即使这种初始化不需要静态地进行,前提是 -初始化的动态版本不会在初始化之前更改名称空间作用域的任何其他对象的值,并且 -初始化的静态版本在初始化变量中产生的值与动态初始化产生的值相同,如果所有不需要静态初始化的变量都是动态初始化的话。
对于一个特定变量的初始化,所有变量都有什么?
如果可能的话,用例子来描述后一点。
发布于 2014-07-03 11:30:16
当一个变量的初始化项引用另一个变量时,这一点很重要。
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。
https://stackoverflow.com/questions/24552283
复制相似问题