我发现C++ prime 上的这句话好像时错误的
在类体内初始化一个const 静态数据成员时该成员必须仍然要被定义在类定义之外
但是因为这个静态数据成员的初始值是在类体中指定的所以在类定义之外的定义不能指定初始值
我这样做在VC++ 6.0上却出现了错误
#include "stdafx.h"
#include<iostream>
using namespace std;
class A
{
public:
static const int i=10;
};
const int A::i;
int main()
{
cout<<A::i;
return 0;
}
那位高手能帮忙解释一下给我啊?
静态数据成员不属于类对象,而是全部类对象所共有,你可以的这么的理解:
静态数据成员独立于类的一个对象,它的定义(分配存储区域)不是定义类对象时进行的,而是独立进行的,
而类定义本身不分配存储区,只是引入一个类型名字(类类型),所以必需在类定义的外面定义它,这是才分配内存给静态数据成员
class A
{
public:
static int i;
};
int main()
{
cout << A::i;
return 0;
}
你这么写会发现i根本不存在