static
关键字在 C++
中是一个多功能的关键字,用于控制变量的存储期、作用域和链接属性。
局部静态变量
在函数内定义的局部变量前加上 static
,该变量就成为局部静态变量。
局部静态变量具有以下特点:
- 存储期 :静态存储期,即变量在程序的整个生命周期内存在,不会因为函数调用结束而销毁。
- 初始化 :只在程序第一次遇到它所在的函数调用时初始化一次,后续调用该函数时不会重新初始化。
- 作用域 :仍然局限于定义它的函数内部。
#include <iostream>
using namespace std;
void func() {
static int count = 0; // 局部静态变量
count++;
cout << "count: " << count << endl;
}
int main() {
func(); // 输出 count: 1
func(); // 输出 count: 2
return 0;
}
全局静态变量
在全局变量前加上 static
,该变量就成为全局静态变量。全局静态变量具有以下特点:
- 存储期 :静态存储期,在程序的整个生命周期内存在。
- 作用域 :局限于定义它的文件内,不能被其他文件访问。
// file1.cpp
static int global_static_var = 10; // 全局静态变量
void func() {
cout << "global_static_var: " << global_static_var << endl;
}
// file2.cpp
// 不能直接访问 file1.cpp 中的 global_static_var
静态函数
在函数前加上 static
,该函数就成为静态函数。
静态函数具有以下特点:
- 链接性 :静态函数只能在定义它的文件内被调用,不能被其他文件访问。
// file1.cpp
static void static_func() {
cout << "This is a static function." << endl;
}
void call_static_func() {
static_func(); // 可以调用
}
// file2.cpp
// 不能直接调用 file1.cpp 中的 static_func
类的静态成员
在类中定义的静态成员变量和静态成员函数具有以下特点:
- 存储期 :静态成员变量在程序的整个生命周期内存在,属于类而不是类的某个对象。
- 作用域 :静态成员函数只能访问静态成员变量和其他静态成员函数。
#include <iostream>
using namespace std;
class MyClass {
public:
static int static_member_var; // 静态成员变量
static void static_member_func() {
cout << "Static member function. Static member var: " << static_member_var << endl;
}
};
int MyClass::static_member_var = 0; // 静态成员变量的定义
int main() {
MyClass::static_member_var = 10; // 通过类名访问静态成员变量
MyClass::static_member_func(); // 通过类名调用静态成员函数
return 0;
}
static
关键字的作用
- 延长局部变量的生命周期 :将局部变量的生命周期延长到整个程序运行期间。
- 限制变量的作用域 :将全局变量和函数的作用域限制在定义它的文件内。
- 定义类的静态成员 :为类提供属于类本身的成员,而不是属于类的某个对象的成员。
推荐一下
https://github.com/0voice