在 C++ 中,static
关键字有多种用途,可以用于修饰类成员变量、类成员函数和局部变量。下面是关于 static
关键字不同用法的详细解释:
1. 静态成员变量(static 成员变量):
静态成员变量是类的所有对象共享的成员变量。它们不属于特定的对象实例,而是属于类本身。静态成员变量只有一个实例,无论创建了多少个类的对象。
要声明静态成员变量,需要在类定义中使用 static
关键字。静态成员变量的初始化必须在类定义之外进行。此外,静态成员变量可以通过类名直接访问,而不是通过对象访问。
class MyClass {
public:
static int staticVar;
// ... 其他成员函数和变量
};
// 初始化静态成员变量
int MyClass::staticVar = 0;
2. 静态成员函数(static 成员函数):
静态成员函数是一种特殊的成员函数,它不依赖于任何特定的对象实例。因此,静态成员函数没有 this
指针。静态成员函数可以通过类名直接调用,而不需要创建对象实例。
静态成员函数只能访问静态成员变量,不能访问类的非静态成员变量,因为非静态成员变量依赖于特定的对象实例。
class MyClass {
public:
static int staticVar;
static void staticFunction() {
// 可以访问静态成员变量
staticVar = 42;
}
// ... 其他成员函数和变量
};
// 初始化静态成员变量
int MyClass::staticVar = 0;
int main() {
// 通过类名调用静态成员函数
MyClass::staticFunction();
return 0;
}
3. 静态局部变量:
在函数内部,可以使用 static
关键字声明静态局部变量。这些变量在函数的多次调用之间保持其值。静态局部变量在程序的整个生命周期中只初始化一次。
void myFunction() {
static int counter = 0; // 只初始化一次
counter++;
std::cout << "counter: " << counter << "\n";
}
int main() {
for (int i = 0; i < 5; ++i) {
myFunction();
}
return 0;
}
这段代码的输出将是:
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5
这个输出表明,静态局部变量 counter
在多次函数调用之间保持了其值。