【发布时间】:2016-04-17 19:28:46
【问题描述】:
我在另一个类中有一个类的静态变量。
class1.h
class1
{
public:
static class2 check;
}
class2.cpp
class2 class1::check;
现在 class2.cpp 具有以下默认构造函数
class2()
{
size = G_SIZE; //this G_SIZE is an extern variable, which gets initialized after main() is called.
}
由于静态初始化发生在 extern 变量初始化之前,我将 0 初始化为 size。我该如何处理?
编辑:不知道为什么它被否决。
【问题讨论】:
-
没有完全理解你 - 这里有什么问题?
-
class2 默认构造函数在静态成员初始化期间被调用,这发生在调用 main 之前。因此,大小变量不会用我想要的值 (G_SIZE) 进行初始化。因为 G_SIZE 只有在 main() 被调用后才会得到它的值。如何使用正确的值初始化大小。
-
G_SIZE被初始化之前main被调用,class1::check也是如此。如果变量是在不同的翻译单元中定义的,那么这些初始化的顺序是未指定的。 -
@molbdnilo: "
G_SIZE在调用main之前被初始化" 嗯?你怎么知道的?看起来 OP 滥用“初始化”来表示第一次分配,但除此之外,除了按照他们的话来接受 OP 之外,没有办法知道这种情况何时发生。 minimal reproducible example 会很好。 -
@molbdnilo 我错过了一个信息,G_SIZE 是从文件中读取的,因此它在 main() 之后调用。但是,我明白你的意思。