静态类变量是否总是在调用其静态实例的构造函数之前初始化?

时间:2019-05-05 11:08:36

标签: c++ static initialization

请考虑以下代码中的情况。

// 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也是如此。这是真的吗?

0 个答案:

没有答案