首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态成员的c++初始化顺序

问静态成员的c++初始化顺序
EN

Stack Overflow用户
提问于 2022-02-26 20:05:58
回答 1查看 41关注 0票数 0

只是想知道下面的静态成员是否是在Foo类对象初始化之前初始化的。因为这两个变量都是静态变量,一个是静态成员,另一个是静态全局变量,因此初始化顺序没有得到保证或指定。

代码语言:javascript
复制
struct Foo
{
   Foo() { assert(a == 7); }

   
   static inline int a = 7;
};

Foo foo;

int main()
{

}

因此,全局Foo和静态类成员之间的初始化顺序没有定义,您可能认为没有保证。但是,我认为在实例化Foo之前,Foo类需要先完成/初始化,因此在这种情况下,可能会保证首先初始化静态成员变量。

EN

回答 1

Stack Overflow用户

发布于 2022-02-26 20:16:17

我在想,在实例化Foo之前,Foo类需要先完成/初始化

一般情况不是这样,所以你应该小心这个假设。

但是,在您的特定示例中,可以保证初始化的顺序。a的初始化器是一个常量表达式,因此a将是常量初始化.常数初始化保证在任何动态初始化( foo的初始化)之前进行.

即使a不是常量初始化,这里也不会出现问题,因为foo是在同一个转换单元中的a之后定义的,foo不是内联或模板变量,因为Foo不是模板。如果这两项要求中的任何一项没有得到满足,订货担保可能会出现问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71279920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档