静态变量的初始化:位置依赖?

时间:2012-07-21 10:01:45

标签: c++ oop

我有以下文件:

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;
类构造函数定义后的

行?在实例化类的对象之前它是否仍会被初始化?

1 个答案:

答案 0 :(得分:2)

这样的静态将在应用程序启动时初始化,我假设在实例化“myclass”之前会这样。

基本上,由于这个原因你定义它的位置并不重要。

但是,如果您创建“myclass”的全局副本,那么我相信您可能会遇到问题。将定义放在变量初始化之前是完全合法的,例如

myclass globalInstance;
int myclass::variable = 0;

在上面的例子中,我很确定myclass的构造函数将在变量初始化之前被调用。在这种情况下,最好在变量之后定义myclass。

修改:请参阅http://www.parashift.com/c++-faq/static-init-order.html