对static变量的初始化情况做一些记录,以便以后不清楚的时候翻看。
struct SimpleStruct
{
int n;
char a[10];
};
class ClassA
{
public:
int GetA()
{
return a;
}
private:
int a;
};
void Test()
{
static int n;
printf("%d\n", n);
}
void TestInt()
{
static int n;
int m;
printf("\nTestInt:\nStatic:%d\nNot Static:%d\n",
n, m);
}
void TestStruct()
{
static SimpleStruct n;
SimpleStruct m;
printf("\nTestStruct:\nStatic:%d %s\nNot Static:%d %s\n",
n.n, n.a, m.n, m.a);
}
void TestClass()
{
static ClassA a;
ClassA b;
printf("TestClass:\nStatic:%d\nNot Static:%d\n", a.GetA(), b.GetA());
}
运行结果:
Test:
0
TestInt:
因为m未定义发生崩溃
TestStruct:
0
0 烫烫烫烫烫烫烫烫
TestClass:
10
0
可以看到static变量会自动初始化,就算是struct、class型的static变量也会初始化成员。如果类构造函数中没有对成员变量赋值,staitc的类的对象的成员变量就会按默认规则初始化,如int初始化为0。推测static在没有显示初始化的情况下,是做类似memset为0的操作