//思考题一:
// testStatic.cpp : 请问下面的代码有没有错误?怎么理解?
//
#include <iostream>
using namespace std;
class A
{
public:
int i;
static A a;
};
A A::a;
int main()
{
A::a.a.a.a.a.a.a.i = 123;
cout << A::a.a.a.i << endl;
system("pause");
}
【答案】
这道题主要是考察对静态成员的理解。因为静态成员a存放在静态数据区,a里面有一个i,sizeof(A)是4,只包含i。A::a.a.a的意思就是取A类的静态成员a,a.a的意思a的静态成员a,也就是取A类的静态成员a,所以无论写多少次都没关系。
这道题目还有一个启示,就是因为static成员是独立于任何对象而存在,不属于任何任何对象的组成部分,所以static数据成员的类型可以是该成员所属的类的类型,而普通成数据成员就不能这么定义。