C++11 中具有非平凡构造函数的全局变量是在静态初始化阶段进入 main 之前构造的。
同样,非函数局部 thread_local 变量是在每个线程的“thread_local 初始化阶段”期间构造的。
C++11 标准是否规定了这些变量的构造顺序?在这两种情况下,如果有两个变量:
// global scope
A::A() { b.f(); } // A constructor uses global b
A a;
B b;
C++11 标准是否指定了它们的初始化顺序,或者如果使用未初始化的变量应该产生错误?
同样对于非函数本地线程_本地:
// global scope
A::A() { b.f(); } // A constructor uses global b
thread_local A a;
thread_local B b;
标准是否指定了它们必须构造的顺序,是否定义了如果在初始化之前从另一个的构造函数中使用变量会发生什么?
您能否提供一个C++11 标准参考来支持您提出的任何要求以获得答案。