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

来源:互联网 发布:mysql乐观锁怎么实现 编辑:程序博客网 时间:2024/06/04 01:22
静态数据成员不属于类对象,而是全部类对象所共有,你可以的这么的理解:
静态数据成员独立于类的一个对象,它的定义(分配存储区域)不是定义类对象时进行的,而是独立进行的,
而类定义本身不分配存储区,只是引入一个类型名字(类类型),所以必需在类定义的外面定义它,这是才分配内存给静态数据成员
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暂时不支持
原创粉丝点击