- 操作系统:ubuntu22.04
- IDE:Visual Studio Code
- 编程语言:C++11
静态变量(static variable)可以在不同实例之间共享,这是面向对象编程(特别是在 C++、Java、C# 等语言中)的一个重要特性。
下面我们以 C++ 为例详细说明:
✅ 静态成员变量(Static Member Variable)
在类中使用 static 声明的成员变量属于类本身,而不是类的某个具体对象(实例)。因此:
- 所有该类的对象共享同一个静态成员变量;
- 即使没有创建任何对象,静态成员变量也存在(只要程序运行);
- 静态成员变量必须在类外进行定义和初始化(C++ 中)。
示例(C++):
#include <iostream>
using namespace std;
class Counter {
public:
static int count; // 声明静态成员变量
Counter() {
count++; // 每创建一个对象,count 加 1
}
void show() {
cout << "当前实例数: " << count << endl;
}
};
// 在类外定义并初始化静态成员(必须!)
int Counter::count = 0;
int main() {
Counter c1;
c1.show(); // 输出:当前实例数: 1
Counter c2;
c2.show(); // 输出:当前实例数: 2
Counter c3;
c1.show(); // 输出:当前实例数: 3 (注意:通过 c1 访问,但值是共享的!)
return 0;
}
🔍 关键点:
count是所有Counter对象共享的。无论通过哪个对象访问,看到的都是同一个值。
⚠️ 注意事项
-
静态成员不属于任何对象
它存储在全局/静态存储区,生命周期贯穿整个程序。 -
可通过类名直接访问(无需实例)
cout << Counter::count; // 合法(前提是 public) -
静态成员函数只能访问静态成员
因为非静态成员需要this指针(依赖具体对象),而静态函数没有this。 -
每个类一份,不是每个对象一份
无论你创建 0 个还是 10000 个对象,静态变量只有一个副本。
其他语言中的类似行为
| 语言 | 静态变量是否跨实例共享 | 示例语法 |
|---|---|---|
| Java | ✅ 是 | static int count; |
| C# | ✅ 是 | static int count; |
| Python | ✅ 是(类属性) | class A: count = 0 |
| C | ❌ 无“类”概念,但文件作用域的 static 全局变量可在多个函数间共享 |
💡 在 C 语言中虽然没有“类”和“实例”的概念,但
static全局变量在同一文件内的所有函数之间共享,也可视为一种“共享状态”。
总结
✅ 静态变量(尤其是类的静态成员变量)确实在不同实例之间共享,这是实现计数器、单例模式、全局配置等设计模式的基础。

被折叠的 条评论
为什么被折叠?



