## C++ static 变量### 简介
在 C++ 中,`static` 关键字为变量赋予了静态存储期限和内部链接属性。这意味着 `static` 变量在程序的整个生命周期中都存在,并且其作用域仅限于声明它的文件或代码块。`static` 变量在多种情况下都非常有用,例如:
创建全局变量的替代方案
: 当您需要一个在多个函数中共享的变量,但又不想将其暴露给整个程序时,可以使用 `static` 变量。
在函数调用之间保留变量值
: `static` 变量在函数调用之间保留其值,这使其成为跟踪函数调用次数或存储先前计算结果的理想选择。
定义类的静态成员
: `static` 关键字用于创建属于整个类而不是单个对象的变量和函数。### static 变量的类型#### 1. 全局静态变量
声明位置:
在任何函数之外。
作用域:
声明它的文件内。
生命周期:
程序的整个生命周期。
初始化:
默认初始化为 0。
链接性:
内部链接,意味着它只能在声明它的文件中访问。
示例:
```c++
#include static int globalCount = 0;void incrementCount() {globalCount++;
}int main() {incrementCount();incrementCount();std::cout << "Global count: " << globalCount << std::endl; // 输出: Global count: 2return 0;
}
```#### 2. 局部静态变量
声明位置:
函数内部。
作用域:
声明它的函数内。
生命周期:
程序的整个生命周期,即使声明它的函数已经返回。
初始化:
第一次执行到声明语句时初始化,之后保留其值。
链接性:
无链接性。
示例:
```c++
#include void printCount() {static int localCount = 0;localCount++;std::cout << "Local count: " << localCount << std::endl;
}int main() {printCount(); // 输出: Local count: 1printCount(); // 输出: Local count: 2return 0;
}
```#### 3. 类静态成员变量
声明位置:
类定义内部。
作用域:
整个类。
生命周期:
程序的整个生命周期。
初始化:
必须在类定义外部初始化。
链接性:
无链接性。
示例:
```c++
#include class MyClass {public:static int objectCount;MyClass() {objectCount++;}
};int MyClass::objectCount = 0; // 静态成员变量初始化int main() {MyClass obj1;MyClass obj2;std::cout << "Object count: " << MyClass::objectCount << std::endl; // 输出: Object count: 2return 0;
}
```### 总结`static` 关键字是 C++ 中一个强大的工具,它为变量提供了静态存储期限和内部链接属性。理解 `static` 变量的不同类型和应用场景对于编写高效、可维护的 C++ 代码至关重要。