类中所有对象所共有的,只分配一次内存
在全局区分配内存,不占用对象的内存,sizeof不计算静态成员变量
#include <iostream>
using namespace std;
class A
{
public:
private:
int a;
static int b;
};
int main(int argc, char **argv)
{
A a;
cout << "sizeof a = " << sizeof(a) << endl;
return 0;
}
输出: sizeof a = 4
类的静态成员变量不能在初始化列表里初始化,也不能在声明的时候初始化,只能在类外初始化
class A
{
public:
A() : a(5) /* , b(2) */ {}
// error: ‘int A::b’ is a static data member; it can only be initialized at its definition
private:
int a = 1;
static int b;
/* static int b = 2;
error: ISO C++ forbids in-class initialization of non-const static member ‘A::b’
*/
};
int A::b = 2; // 正确
静态成员变量属于声明的类,不属于某个对象,所以既可以采用对象方式访问,也可以采用类名加::的方式访问
A a;
cout << "b = " << a.b << endl;
cout << "b = " << A::b << endl;
静态数据成员和普通函数一样遵循public、protected、private访问规则