在C++中,static关键字有多种用途,主要有以下几个方面:

  1. 静态成员变量:静态成员变量是类的所有对象共享的成员变量。这意味着无论你创建多少个类的对象,静态成员变量只有一个副本。静态成员变量在类声明中定义,其初始化可以在类声明中完成,也可以在类定义外部完成。静态成员变量需要在类声明中声明,并在类定义外部进行定义和初始化。

例如:

class MyClass {
public:
    static int staticVar; // 声明静态成员变量
};

int MyClass::staticVar = 0; // 定义和初始化静态成员变量
  1. 静态成员函数:静态成员函数与静态成员变量类似,它是类的所有对象共享的函数。这意味着无论你创建多少个类的对象,静态成员函数只有一个副本。静态成员函数只能访问静态成员变量或其他静态成员函数。

例如:

class MyClass {
public:
    static void staticFunction() { // 声明静态成员函数
        // 这里可以访问静态成员变量或其他静态成员函数
    }
};
  1. 静态局部变量:在函数内部定义的静态变量只初始化一次,并在函数调用之间保持其值。静态局部变量的作用域仅限于其所在的函数,但是其生命周期与全局变量相同。

例如:

void myFunction() {
    static int callCount = 0; // 静态局部变量,只初始化一次并在函数调用之间保持其值
    callCount++;
    std::cout << "This function has been called " << callCount << " times.\n";
}
  1. 静态全局变量和函数:在文件范围内,静态全局变量和函数的作用域仅限于其所在的源文件。这意味着其他源文件无法访问它们。在函数内部定义的静态全局变量只初始化一次,并在程序执行期间保持其值。静态全局变量的生命周期与全局变量相同。

例如:

// file1.cpp
static int myStaticGlobalVar = 0; // 静态全局变量,只初始化一次并在程序执行期间保持其值

void myStaticGlobalFunction() { // 静态全局函数,其他源文件无法访问它
    // 这里可以访问静态全局变量或其他静态全局函数
}