深入理解C++static 关键字修饰类的成员变量

类的静态成员变量存储在静态存储区不存储在对象的内存布局(堆或栈)中。

该变量是该类的所有对象所共有的。

它在程序启动时(main函数执行前)完成初始化,在程序结束时才销毁。

可以通过类名::变量名(如MyClass::count)在任何地方访问(前提是public

如以下代码所示 变量count是类的对象class1和类的对象class2所共有的,因为赋值语句class1.count =20或者class2.count = 30都改变了MyClass::count的值。

特别注意:类外的初始化语句是重要而且必须的(int MyClass::count = 0;)没有它编译将报错。

#include <iostream> class MyClass { public: static int count; // ① 类内声明(只是告诉编译器有这个变量) }; int MyClass::count = 0; // ② 类外定义(真正分配内存并初始化,此处是全局域) int main() { MyClass::count = 10; // 正确访问 std::cout << MyClass::count; // 输出 10 MyClass class1; class1.count = 20; std::cout << MyClass::count; // 输出 20 MyClass class2; class2.count = 30; std::cout << MyClass::count; // 输出 30 return 0; }