在C++中,static关键字有多种用途,主要用于控制变量和函数的存储期和链接性。下面详细介绍static关键字在不同上下文中的用法,并提供相应的代码示例。
1. 静态局部变量
静态局部变量在函数中定义,但它们的生命周期贯穿程序的整个运行周期,而不仅仅是函数的执行周期。静态局部变量在第一次调用函数时初始化,并且保持其值直到程序结束。
#include <iostream>
void staticLocalExample() {
static int count = 0; // 静态局部变量
count++;
std::cout << "Count: " << count << std::endl;
}
int main() {
staticLocalExample();
staticLocalExample();
staticLocalExample();
return 0;
}
输出:
Count: 1
Count: 2
Count: 3
2. 静态类成员变量和成员函数
静态成员变量和成员函数属于类而不是类的对象。静态成员变量在所有对象之间共享,而静态成员函数只能访问静态成员变量。
#include <iostream>
class MyClass {
public:
static int staticVar; // 静态成员变量
static void staticFunc() { // 静态成员函数
std::cout << "Static Variable: " << staticVar << std::endl;
}
};
// 静态成员变量的定义和初始化
int MyClass::staticVar = 0;
int main() {
MyClass::staticVar = 10; // 通过类名访问静态成员变量
MyClass::staticFunc(); // 通过类名调用静态成员函数
MyClass obj1, obj2;
obj1.staticVar = 20; // 通过对象访问静态成员变量
MyClass::staticFunc();
return 0;
}
输出:
Static Variable: 10
Static Variable: 20
3.静态全局变量和函数
静态全局变量和函数的作用域限制在定义它们的文件中。这种用法通常用于实现文件内的封装,避免命名冲突。
#include <iostream>
// 静态全局变量
static int globalVar = 100;
// 静态函数
static void staticFunction() {
std::cout << "Static Function: " << globalVar << std::endl;
}
int main() {
staticFunction();
return 0;
}
输出:
Static Function: 100
4.静态成员变量在类中的初始化
静态成员变量必须在类定义外进行初始化。
#include <iostream>
class Example {
public:
static int staticVar;
Example() {
staticVar++;
}
static void showStaticVar() {
std::cout << "Static Variable: " << staticVar << std::endl;
}
};
// 静态成员变量的定义和初始化
int Example::staticVar = 0;
int main() {
Example obj1;
Example obj2;
Example::showStaticVar(); // 输出:Static Variable: 2
return 0;
}
总结
- 静态局部变量:在函数中定义,但其生命周期贯穿程序的整个运行周期。
- 静态类成员变量和成员函数:属于类而不是类的对象,所有对象共享静态成员变量。
- 静态全局变量和函数:作用域限制在定义它们的文件中。
- 静态成员变量初始化:必须在类定义外进行初始化。