只是想知道下面的静态成员是否是在Foo类对象初始化之前初始化的。因为这两个变量都是静态变量,一个是静态成员,另一个是静态全局变量,因此初始化顺序没有得到保证或指定。
struct Foo
{
Foo() { assert(a == 7); }
static inline int a = 7;
};
Foo foo;
int main()
{
}因此,全局Foo和静态类成员之间的初始化顺序没有定义,您可能认为没有保证。但是,我认为在实例化Foo之前,Foo类需要先完成/初始化,因此在这种情况下,可能会保证首先初始化静态成员变量。
发布于 2022-02-26 20:16:17
我在想,在实例化Foo之前,Foo类需要先完成/初始化
一般情况不是这样,所以你应该小心这个假设。
但是,在您的特定示例中,可以保证初始化的顺序。a的初始化器是一个常量表达式,因此a将是常量初始化.常数初始化保证在任何动态初始化( foo的初始化)之前进行.
即使a不是常量初始化,这里也不会出现问题,因为foo是在同一个转换单元中的a之后定义的,foo不是内联或模板变量,因为Foo不是模板。如果这两项要求中的任何一项没有得到满足,订货担保可能会出现问题。
https://stackoverflow.com/questions/71279920
复制相似问题