请考虑以下代码中的情况。
// Foo.h
#include <vector>
class Foo
{
public:
Foo()
{
foos.emplace_back(this);
}
private:
static std::vector<Foo*> foos;
};
// Foo.cpp
std::vector<Foo*> Foo::foos;
// Bar.h
class Bar
{
private:
static Foo foo;
};
// Bar.cpp
Foo Bar::foo;
在意识到静态初始化顺序的惨败之后,我是否可以假设Foo::foos
总是在调用Bar::foo
构造函数之前被初始化,还是仍然未指定顺序?
From what I gathered在我看来,这取决于所使用的类型,但是在我的情况下,这种假设是无效的,因为std::vector
没有constexpr
构造函数,因此要执行其初始化在非局部变量初始化的动态初始化步骤中,Foo
也是如此。这是真的吗?