使用默认构造函数初始化(编译器生成) “静态初始化”或“动态初始化”?
我的意思是
class test{
int m;
public :
test(): m(12) {}
};
test i;
int main()
{//
}
这里是i
初始化时 - 在编译时还是动态初始化,即在其他文件中使用i
进行初始化或其他事情是否安全?
如果用户定义了默认构造函数,该怎么办?
答案 0 :(得分:2)
由于test
有一个构造函数,它将在初始化对象时运行。该对象将放入一个初始化为零的存储区。您甚至可以通过在创建对象之前和之后使用i.m
初始化值来测试它:
extern test i;
int dummy1 = i.m;
test i;
int dummy2 = i.m;
然后,当您打印dummy1
和dummy2
时,您应分别获得0
和12
。如果要静态初始化i
,则需要使用类似
test i = { 12 };
但这仅适用于POD。所有这一切,请注意全球数据总是很糟糕。只是不要打扰并正确地做事。