您的位置:首页 > 其它

静态数据成员的初始值的指定

2007-01-05 16:45 218 查看
静态数据成员不属于类对象,而是全部类对象所共有,你可以的这么的理解:
静态数据成员独立于类的一个对象,它的定义(分配存储区域)不是定义类对象时进行的,而是独立进行的,
而类定义本身不分配存储区,只是引入一个类型名字(类类型),所以必需在类定义的外面定义它,这是才分配内存给静态数据成员
class A
{
public:
static int i;
};

int main()
{
cout << A::i;
return 0;
}
你这么写会发现i根本不存在

class A
{
public:
static int i;
};

int A::i =10;

int main()
{
cout << A::i;
return 0;
}
这样就可以了
至于初始值,
在类定义的时候指出和类外实际定义的时候
给出只能用一个,我上面的例程,是在实际定义的时候给初始值的
否则编译器怎么知道到底用哪个去初始化

类定义中的初始值的指定只是一个指定的过程,这个并不是一个数据成员定义,初始化的时候,只是说明以后的在定义的时候,用这里指出值的来进行初始化
在vc6 类定义中的static int i =0;赋成其它值会报个错
而在类外则可,是编译器相关么,是语法规则么

========================
解决:
能够使用指定初始值语法的需满足三个条件:
1。static
2。const
3。有序类型(可以比较大小,题解说“整型”,double也并不属于,int属于,个人认为enum,char之类也属于,看函数重载的参数转换中整型转换提到的类型,个人认为均属于)
class A
{
public:
static const int ci = 10;
};
const int A::ci ;

int main()
{
cout << A::ci ;
return 0 ;
}
这种才可以的,一般的static不能使用指定初始值语法
上述语法vc6暂时不支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: