在C++中,static
关键字有多种用途,具体取决于它在代码中的上下文
静态局部变量:在函数内部使用static
修饰局部变量时,该变量的生命周期将从创建时开始,直到程序结束。这意味着,当函数返回时,静态局部变量不会被销毁,而是保留其值,以便在下次调用该函数时可以继续使用。
void myFunction() {
static int count = 0;
count++;
cout << "This function has been called "<< count << " times."<< endl;
}
静态成员变量:在类中使用static
修饰成员变量时,该变量将属于整个类,而不是类的某个特定实例。因此,所有类的实例共享相同的静态成员变量。
class MyClass {
public:
static int sharedValue;
};
int MyClass::sharedValue = 0;
int main() {
MyClass obj1, obj2;
obj1.sharedValue = 10;
cout << "obj1.sharedValue: "<< obj1.sharedValue << ", obj2.sharedValue: "<< obj2.sharedValue<< endl; // 输出:obj1.sharedValue: 10, obj2.sharedValue: 10
}
静态成员函数:在类中使用static
修饰成员函数时,该函数不能访问类的非静态成员变量或非静态成员函数,因为它们需要一个类的实例才能访问。静态成员函数可以在没有类实例的情况下调用。
class MyClass {
public:
static void printMessage() {
cout << "Hello, World!"<< endl;
}
};
int main() {
MyClass::printMessage(); // 输出:Hello, World!
}
静态全局变量:在全局范围内使用static
修饰变量时,该变量的作用域将限制在定义它的源文件中。这意味着,在其他源文件中,无法直接访问这个静态全局变量。
// file1.cpp
static int globalVar = 10;
// file2.cpp
// 无法直接访问file1.cpp中的globalVar
总之,static
关键字在C++中具有多种用途,包括控制变量的生命周期、共享数据、限制函数和变量的作用域等。