我有以下文件:
H档
class myclass
{
static int variable;
// constructor
myclass();
}
Cpp文件
// initialize this variable
int myclass::variable = 0;
myclass::myclass()
{
// I use here the static variable
}
我的问题是:什么时候静态变量会被初始化?第一个或在构造函数之后?
如果我把
怎么办?int myclass::variable = 0;
类构造函数定义后的行?在实例化类的对象之前它是否仍会被初始化?
答案 0 :(得分:2)
这样的静态将在应用程序启动时初始化,我假设在实例化“myclass”之前会这样。
基本上,由于这个原因你定义它的位置并不重要。
但是,如果您创建“myclass”的全局副本,那么我相信您可能会遇到问题。将定义放在变量初始化之前是完全合法的,例如
myclass globalInstance;
int myclass::variable = 0;
在上面的例子中,我很确定myclass的构造函数将在变量初始化之前被调用。在这种情况下,最好在变量之后定义myclass。
修改:请参阅http://www.parashift.com/c++-faq/static-init-order.html