1

我有以下文件:

H文件

class myclass
{
   static int variable;

   // constructor
   myclass();
}

cp文件

// initialize this variable
int myclass::variable = 0;

myclass::myclass()
{
   // I use here the static variable
}

我的问题是:什么时候初始化静态变量?首先还是在构造函数之后?

如果我把

int myclass::variable = 0;

类构造函数定义之后的行?在类的对象被实例化之前它还会被初始化吗?

4

1 回答 1

2

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

基本上,由于这个原因,你在哪里定义它并不重要。

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

myclass globalInstance;
int myclass::variable = 0;

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

编辑:见http://www.parashift.com/c++-faq/static-init-order.html

于 2012-07-21T10:03:06.970 回答