C++中static的含义及用法


在C++中,static是一个关键字,可以用于不同的场合,有不同的作用和用法,下面分别进行介绍。

1、静态局部变量

在函数内部使用static修饰局部变量,会使它成为静态局部变量。静态局部变量的生命周期与程序的生命周期相同,即它只会被初始化一次,且只有在第一次调用该函数时才会被初始化,之后每次调用该函数时都会保留上一次的值。例如:

#include <iostream>

void foo() {
    
    
    static int x = 0;
    x++;
    std::cout << "x = " << x << std::endl;
}

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

在上述示例中,函数foo()中的变量x被定义为静态局部变量,它的值会被保留并累加,每次输出的结果都会增加。

2、静态全局变量

在函数外部使用static修饰全局变量,会使它成为静态全局变量。静态全局变量的作用域仅限于当前文件,即只能在当前文件内被访问,不能被其他文件访问。例如:

#include <iostream>

static int x = 0;

void foo() {
    
    
    x++;
    std::cout << "x = " << x << std::endl;
}

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

在上述示例中,全局变量x被定义为静态全局变量,它只能在当前文件内被访问。

3、静态成员变量

在类中使用static修饰成员变量,会使它成为静态成员变量。静态成员变量的生命周期与程序的生命周期相同,即它只会被初始化一次,且存在于所有类对象之外。静态成员变量在类内部声明,在类外部需要进行定义和初始化。例如:

#include <iostream>

class MyClass {
    
    
public:
    static int count;
};

int MyClass::count = 0;

void foo() {
    
    
    MyClass::count++;
    std::cout << "MyClass::count = " << MyClass::count << std::endl;
}

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

在上述示例中,类MyClass中定义了一个静态成员变量count,它被所有对象共享。在main()函数中,通过调用foo()函数对静态变量count进行了累加,最终输出的结果是MyClass::count = 3。

4、静态成员函数

在类中使用static修饰成员函数,会使它成为静态成员函数。静态成员函数不依赖于任何类对象,只能访问类的静态成员变量和静态成员函数,不能访问类的非静态成员变量和非静态成员函数。静态成员函数的调用方式是使用类名和作用域解析运算符来调用的。例如:

#include <iostream>

class MyClass {
    
    
public:
    static int count;
    static void increment() {
    
    
        count++;
    }
};

int MyClass::count = 0;

int main() {
    
    
    MyClass::increment();
    MyClass::increment();
    std::cout << "MyClass::count = " << MyClass::count << std::endl; // 输出 MyClass::count = 2
    return 0;
}

在上述示例中,类MyClass中定义了一个静态成员函数increment(),它可以访问静态成员变量count,并对其进行累加。在main()函数中,通过使用类名来调用静态成员函数,最终输出的结果是MyClass::count = 2。

总的来说,static关键字的作用和用法非常丰富,可以用于函数、变量、类等不同的场合,具体的作用和用法需要根据具体的情况来决定。

猜你喜欢

转载自blog.csdn.net/qq_43448116/article/details/130176969