【发布时间】:2022-01-02 16:16:58
【问题描述】:
在 C++ 中,我可以使用 static 实现延迟初始化:
struct foo { ... };
foo create_foo();
const foo& get_foo() {
static foo x = create_foo();
return x;
}
这里,初始化在第一次调用get_foo 时发生(惰性),get_foo 保证是线程安全的,并且初始化保证只发生一次。具体来说:
[stmt.dcl] "具有静态存储持续时间的块范围变量的动态初始化...在控制第一次通过其声明时执行...如果控制同时进入声明...并发执行应等待初始化完成”
如何在标准 C 中获得相同的行为?
【问题讨论】:
-
你确定吗?我希望所有静态对象都在
main()被调用之前被初始化。标准是怎么说的? -- 常见的解决方案是使用初始化为nullptr(C 中为NULL)的指针,然后采取相应的行动。 -
[stmt.dcl] "具有静态存储持续时间的块范围变量的动态初始化......在控制第一次通过其声明时执行......如果控制同时进入声明...... . 并发执行应等待初始化完成"
-
@konsolas,最好用那句话来编辑你的问题。
标签: c lazy-initialization