作用:用于控制变量的生存期和作用域。
局部静态变量
局部 static
变量是在函数内部声明的,具有以下特性:
- 生存期:整个程序运行期间,即使离开函数作用域,它的值仍然保持。
- 作用域:仅限于声明它的函数。
但是
-
不能直接访问:在一个函数中声明的
static
变量在另一个函数中是不可见的,会导致编译错误。
#include <iostream>
void functionA() {
static int counter = 0; // `static` 变量
counter++;
std::cout << "Counter in functionA: " << counter << std::endl;
}
void functionB() {
// 不能访问 functionA 中的 static 变量
// std::cout << counter; // 这会导致编译错误
}
int main() {
functionA(); // 输出 1
functionA(); // 输出 2
functionB(); // 无法访问 functionA 中的 static 变量
return 0;
}
静态全局变量
静态全局变量在文件内部声明,具有以下特性:
- 生存期:程序运行期间。
- 作用域:仅限于声明它的源文件。这意味着它不能被其他源文件访问。
静态成员变量
在类中使用 static
声明的变量是类的一个属性。它具有以下特性:
- 生存期:程序运行期间。
- 作用域:属于类,而不是某个特定对象。所有对象共享同一份
static
成员变量。
#include <iostream>
class MyClass {
public:
static int static_var; // 静态成员变量
void increment() {
static_var++;
}
static void show() {
std::cout << "Static var: " << static_var << std::endl;
}
};
int MyClass::static_var = 0; // 定义静态成员变量
int main() {
MyClass obj1;
MyClass obj2;
obj1.increment();
MyClass::show(); // 输出: Static var: 1
obj2.increment();
MyClass::show(); // 输出: Static var: 2
return 0;
}