掌握 C++ 中 static 关键字的多种使用场景


static 关键字在 C++ 中有多种用途,主要用于定义静态成员变量、静态成员函数、局部静态变量和静态局部函数。以下是 static 关键字在不同场景下的多种用法:

1. 静态成员变量

静态成员变量属于类,而不是类的每个对象,因此所有对象共享同一个静态成员变量的内存空间。静态成员变量在编译时被分配内存空间,并且必须在类的外部初始化。

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

int MyClass::count = 0; // 初始化静态成员变量

// 使用静态成员变量
MyClass obj1;
MyClass obj2;
obj1.count = 10;
std::cout << obj2.count; // 输出 10

2. 静态成员函数

静态成员函数属于类,而不是类的每个对象,因此它们不需要通过对象来调用,可以直接通过类名访问。静态成员函数只能访问静态成员变量或其他静态成员函数,不能访问非静态成员。

class MyClass {
public:
    static void printCount() {
        std::cout << count; // 访问静态成员变量
    }
private:
    static int count;
};

int MyClass::count = 0; // 初始化静态成员变量

// 调用静态成员函数
MyClass::printCount();

3. 局部静态变量

局部静态变量是在函数内部声明的静态变量,它们在第一次进入函数时初始化,并且在程序的整个生命周期内保持其值。局部静态变量在函数调用之间保持其值,但其作用域仅限于声明它的函数。

void func() {
    static int count = 0; // 声明局部静态变量
    count++;
    std::cout << count << std::endl;
}

// 调用函数多次
func(); // 输出 1
func(); // 输出 2

4. 静态局部函数

静态局部函数只能在声明它的文件中可见,不能在其他文件中使用。它们与普通的局部函数一样,但只能在声明它的文件中调用。

void func1() {
    std::cout << "Function 1" << std::endl;
}

static void func2() {
    std::cout << "Function 2" << std::endl;
}

// 在其他文件中调用 func1() 可行
// 在其他文件中调用 func2() 不可行

static 关键字在 C++ 中的多种用法使得它成为一个非常灵活和强大的工具,可以在不同的场景中实现各种功能。


原文链接:codingdict.net