一、核心总结
static 是'让变量/函数的生命周期或可见范围改变'的关键字,它有三种完全不同的含义,取决于用在什么位置:
- 改变存储期(让局部变量变成'全局寿命')
- 改变链接性(让全局变量/函数'只在本文件可见')
- 属于类而非对象(类静态成员)
记不住全部也没关系,记住这三句话就够日常和面试用了:
- 局部
static= '函数内永生变量' - 全局
static= '本文件私有变量/函数' - 类
static= '全类共享成员'
二、static 的三种核心用法对比表
| 用法位置 | C 语言支持 | C++ 支持 | 含义 | 生命周期 | 可见范围 | 默认初始化值 |
|---|---|---|---|---|---|---|
| 局部静态变量 | Yes | Yes | 存储期变为静态(函数结束后不销毁) | 整个程序 | 本函数 | 0 |
| 全局静态变量 | Yes | Yes | 链接性变为内部链接 | 整个程序 | 本文件 | 0 |
| 全局静态函数 | Yes | Yes | 链接性变为内部链接(不可被其他文件调用) | 整个程序 | 本文件 | - |
| 类静态成员变量 | No | Yes | 属于类,不属于对象 | 整个程序 | 全类 | 必须手动初始化 |
| 类静态成员函数 | No | Yes | 不需要对象即可调用 | 整个程序 | 全类 | - |
| C++17 inline static | No | Yes | 类内直接初始化静态成员 | 整个程序 | 全类 | 支持 |
三、详细用法 + 代码示例
1. 局部静态变量(最常用、最容易考)
void func() {
static int count = 0; // 只在第一次调用时初始化
count++;
printf("第 %d 次调用\n", count);
}
{
();
();
();
}

