为什么static成员必须在类外初始化

简介:

为什么静态成员不能在类内初始化

在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。

复制代码
class A
{  
private:
    static int count ; // 类内声明
};

int A::count = 0 ; // 类外初始化,不必再加static关键字
复制代码

为什么?因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

什么东西能在类内初始化

能在类中初始化的成员只有一种,那就是静态常量成员。

这样不行

class A
{  
private:
    static int count = 0; // 静态成员不能在类内初始化
};

这样也不行

class A
{  
private:
    const int count = 0; // 常量成员也不能在类内初始化
};

但是这样可以

class A
{  
private:
    static const int count = 0; // 静态常量成员可以在类内初始化
};

本文转自zdd博客园博客,原文链接:http://www.cnblogs.com/graphics/archive/2010/07/07/1772733.html,如需转载请自行联系原作者

相关文章
|
6月前
|
C++
【c++】static成员
【c++】static成员
【c++】static成员
|
6月前
|
C语言
学习static定义静态变量
学习static定义静态变量。
59 4
|
6月前
|
存储 设计模式 算法
[C++] static静态成员变量/函数的用法
[C++] static静态成员变量/函数的用法
78 1
|
6月前
|
C语言
C11中类成员变量定义时初始化问题
C11中类成员变量定义时初始化问题
67 0
关于static修饰的成员方法成员成员变量的相关讨论
关于static修饰的成员方法成员成员变量的相关讨论
|
C++
【C++】static成员
【C++】static成员
93 0
|
编译器 C++
C++——初始化列表 | explicit关键字 | static成员(下)
C++——初始化列表 | explicit关键字 | static成员(下)
76 0
|
C++
C++——初始化列表 | explicit关键字 | static成员(上)
C++——初始化列表 | explicit关键字 | static成员(上)
75 0
C++:类的static成员,友元和构造函数初始化列表
C++:类的static成员,友元和构造函数初始化列表