static
是 C++ 中的关键字,用于声明静态成员变量和静态成员函数,以及在局部变量中具有持久性。
1. 静态变量
静态局部变量:在函数内部声明的静态变量。和全局变量一样,数据都存放在全局区。
在函数内部声明的静态变量,其生命周期跨越函数调用。它们只会在第一次函数调用时初始化,并且保留其值直到程序结束。
1
2
3
4
5
6
7
8
9
10
11
12void foo() {
static int count = 0;
count++;
std::cout << "Count: " << count << std::endl;
}
int main() {
foo(); // 输出:Count: 1
foo(); // 输出:Count: 2
foo(); // 输出:Count: 3
return 0;
}静态成员变量:静态成员变量属于类,而不是类的实例。它们被所有类的对象所共享,并且在类的所有实例中只有一个副本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyClass {
public:
static int count;
};
int MyClass::count = 0; // 静态成员变量在类外部进行初始化
int main() {
MyClass obj1;
MyClass::count = 5; // 通过类名访问静态成员变量
std::cout << "Count: " << obj1.count << std::endl; // 输出:Count: 5,因为静态成员变量是共享的
return 0;
}静态全局变量:在函数外部声明的静态变量称为静态全局变量。它们的作用域限制在声明它们的文件内,并且在程序的整个生命周期内保留其值。
说到这,顺便说说
extern
关键字。它用于声明一个变量或函数是在其他文件中定义的,而不是在当前文件中定义的。即在当前文件中声明在其他文件中定义的变量或函数,以便在当前文件中使用它们。
2. 静态函数
静态成员函数:静态函数属于类,而不是类的实例。它们可以直接通过类名调用,而无需创建类的实例。
1 | class Math { |