static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了(见《Inside The C++ Object Model》page247)!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗?
int i;是定义,会在栈里开辟空间。把下面两个程序比较一下,也许你可以有所理解:
程序A:
#include "stdafx.h"
#include
class A
{
public:
static int a;
//int c;
};
int A::a = 1;
int _tmain(int argc, _TCHAR* argv[])
{
A::a++;
printf("%d\n",A::a);
printf("%d\n",sizeof(A));
getchar();
return 0;
}
程序B:
// asd.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
class A
{
public:
static int a;
int c;
};
int A::a = 1;
int _tmain(int argc, _TCHAR* argv[])
{
A::a++;
printf("%d\n",A::a);
printf("%d\n",sizeof(A));
getchar();
return 0;
}