📜  C ++ |静态关键字|问题3(1)

📅  最后修改于: 2023-12-03 15:13:45.470000             🧑  作者: Mango

C++中的静态关键字

在C++中,静态关键字(static)具有多种用途。本文将介绍它们的用法。

1. 静态局部变量

在函数内部,使用static关键字声明的变量具有静态存储持续期,在函数调用结束后仍然存在。例如:

int foo()
{
    static int count = 0;
    count++;
    return count;
}

int main()
{
    cout << foo() << endl; // 输出 1
    cout << foo() << endl; // 输出 2
    cout << foo() << endl; // 输出 3
    return 0;
}

在上述代码中,函数foo()中声明的静态变量count会在每次调用时自增并返回增加后的值。在函数调用结束之后,count仍然存在,它的值会被保留下来供下一次函数调用时使用。

2. 静态全局变量

在函数外部、模块内部使用static关键字声明的变量被称为静态全局变量。这些变量只能在被声明的模块内部访问,不能被其他模块访问。例如:

static int count = 0;

void foo()
{
    count++;
    cout << count << endl;
}

int main()
{
    foo(); // 输出 1
    foo(); // 输出 2
    foo(); // 输出 3
    return 0;
}

在上述代码中,静态全局变量count只能在当前文件内部访问,无法被其他文件访问。函数foo()中访问的变量count就是这个静态全局变量。

3. 静态成员变量和静态成员函数

在C++的类中,使用static关键字声明的变量被称为静态成员变量,使用static关键字声明的函数被称为静态成员函数。它们与普通成员变量和成员函数的区别在于,它们属于类的整个实例共享,而不是属于类的每个实例。

class MyClass
{
public:
    static int count;
    static void foo()
    {
        cout << "count = " << count << endl;
    }
};

int MyClass::count = 0;

int main()
{
    MyClass::count++;
    MyClass::foo(); // 输出 count = 1
    MyClass::count++;
    MyClass::foo(); // 输出 count = 2
    return 0;
}

在上述代码中,声明了一个名为MyClass的类,其中包含了一个静态成员变量count和一个静态成员函数foo()。在程序运行时,可以直接使用MyClass::count和MyClass::foo()访问这两个静态成员。

总结

静态关键字在C++中具有多种用途,包括声明静态局部变量、静态全局变量和静态成员变量、静态成员函数。它们都具有静态存储持续期,且只会初始化一次。静态局部变量用于记录函数调用次数、缓存临时数据等,静态全局变量可以使变量作用域仅限于当前文件,静态成员变量和静态成员函数可以使变量和函数共享于类的所有实例。