在 C++ 中,关键字 static 在不同的上下文中具有不同的意义。下面是它的几个主要用途和对应的解释:
在全局范围:全局的静态变量或函数只在定义它的文件中可见,这意味着其他文件中的代码不能直接访问此变量或函数。这提供了一种封装和隐藏实现细节的方式。
cpp
// file1.cpp
static int hiddenVariable = 42;
在其他源文件中,hiddenVariable 是不可见的。
在类中的静态成员:静态成员属于类本身,而不是类的任何特定对象。这意味着无论创建多少个该类的对象,都只有一个静态成员的副本。
cpp
class MyClass {
public:
static int staticMember;
};
int MyClass::staticMember = 0;
你可以使用类名直接访问静态成员,例如 MyClass::staticMember。
在函数内的静态变量:在函数内部声明的静态变量在函数第一次调用时初始化,之后在连续的函数调用中保持其值不变。这与普通的局部变量不同,因为普通的局部变量在每次函数调用时都会被重新初始化。
cpp
void myFunction() {
static int count = 0;
count++;
std::cout << count << std::endl;
}
如果你连续调用 myFunction() 三次,输出将是 1, 2 和 3。
静态成员函数:类中的静态成员函数可以在没有类的对象实例的情况下被调用,它只能访问类的静态成员。
cpp
class MyClass {
public:
static void staticFunction() {
// can access static members here
}
};
你可以这样调用它:MyClass::staticFunction();
总的来说,static 在 C++ 中提供了各种用途,从隐藏实现细节,到为类提供共享数据,再到在函数调用之间保持变量状态。