程序退出期间的函数局部静态初始化
标准对程序退出期间的函数局部静态初始化有什么看法?
编辑:为了清楚起见,我的意思是代码示例中的情况 - 本地静态b是在构造另一个静态之后a构造的(因此应该b在之前销毁a),但b也在a的析构函数期间构造,所以它应该立即销毁吗?后?优?
我没有设法找到有关此事的任何参考资料。
我想知道这种情况是 UB,还是应该有一些定义的行为?
下面的代码就是一个例子:
struct B{};
void foo()
{
static B b;
}
struct A
{
~A() { foo(); }
};
int main()
{
static A a;
return 0;
}
如您所见,A 的析构函数会在程序退出时发生(因为它具有静态存储),并且它会尝试构造 B 静态实例。
我对 C++17 更感兴趣,如果它在这个主题上有什么不同的话。