静态或动态初始化时

时间:2012-02-18 09:51:42

标签: c++ initialization

使用默认构造函数初始化(编译器生成) “静态初始化”或“动态初始化”?

我的意思是

class test{
  int m;

public :
  test(): m(12) {}

};

test i;

int main()
{//
}

这里是i初始化时 - 在编译时还是动态初始化,即在其他文件中使用i进行初始化或其他事情是否安全? 如果用户定义了默认构造函数,该怎么办?

1 个答案:

答案 0 :(得分:2)

由于test有一个构造函数,它将在初始化对象时运行。该对象将放入一个初始化为零的存储区。您甚至可以通过在创建对象之前和之后使用i.m初始化值来测试它:

extern test i;
int dummy1 = i.m;
test i;
int dummy2 = i.m;

然后,当您打印dummy1dummy2时,您应分别获得012。如果要静态初始化i,则需要使用类似

的内容
test i = { 12 };

但这仅适用于POD。所有这一切,请注意全球数据总是很糟糕。只是不要打扰并正确地做事。