静态或动态初始化

问题描述:

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

我的意思是,在

class test{ 
    int m; 

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

}; 

test i; 

int main() 
{// 
} 

这里时i得到初始化 - 在编译时或者是动态初始化,即是可以安全使用于其他文件i用于初始化或其他东西?
如果用户定义了默认构造函数会怎么样?

+3

问题的症结在于:“当这些对象具有用户定义的构造函数时,如何初始化全局/命名空间范围对象?”。答案可以在标准的§3.6.2中找到。在这种情况下,'i.m'会被静态初始化为0,并被动态地初始化为12,然而,如果默认构造函数被声明为'constexpr',那么'i.m'会被静态初始化为12。 – Mankarse 2012-02-18 10:27:07

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

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

当你然后打印dummy1dummy2你应该得到012,分别。如果你想要静态初始化i你需要但使用像

test i = { 12 }; 

这只能带豆荚的作品。总之,请注意全球数据总是不好的。只是不要打扰和正确做事。