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

我的意思是

class test{
  int m;

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

};

test i;

int main()
{//
}

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

最佳答案

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

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

然后,当您打印dummy1dummy2时,应该分别得到012。如果要静态初始化i,则需要使用类似
test i = { 12 };

但是,这仅适用于POD。综上所述,请注意,全局数据总是不好的。只是不要打扰并正确地做事。

关于c++ - 静态或动态初始化时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9340183/

10-12 01:13
查看更多