如何区分C++局部静态变量,全局静态变量和类静态变量的使用范围和生命周期

以下是一个C++代码示例,展示了如何使用类来包含局部静态变量(注意,局部静态变量通常不会直接定义在类中,但我会通过类的方法来演示它们的用法)、全局静态变量和类静态变量。

#include <iostream>  
  
// 全局静态变量  
static int globalStaticVar = 0;  
  
class MyClass {  
public:  
    // 类静态变量  
    static int classStaticVar;  
  
    // 方法,演示局部静态变量的使用  
    void incrementLocalStaticInMethod() {  
        // 注意:局部静态变量实际上定义在函数内部  
        static int localStaticVar = 0; // 这里是局部静态变量的声明和初始化  
        ++localStaticVar;  
        std::cout << "Local static variable in method: " << localStaticVar << std::endl;  
    }  
  
    // 静态方法,演示类静态变量的使用  
    static void incrementClassStaticVar() {  
        ++classStaticVar;  
        std::cout << "Class static variable: " << classStaticVar << std::endl;  
    }  
  
    // 构造函数,演示如何访问全局静态变量  
    MyClass() {  
        ++globalStaticVar;  
        std::cout << "Global static variable before construction: " << globalStaticVar << std::endl;  
    }  
  
    // 析构函数  
    ~MyClass() {  
        // 注意:这里通常不会直接修改全局或类静态变量,但可以根据需要进行  
    }  
};  
  
// 初始化类静态变量  
int MyClass::classStaticVar = 0;  
  
int main() {  
    // 修改全局静态变量  
    ++globalStaticVar;  
    std::cout << "Global static variable in main before object creation: " << globalStaticVar << std::endl;  
  
    // 创建MyClass对象  
    MyClass obj1;  
  
    // 通过对象调用方法,演示局部静态变量的使用  
    obj1.incrementLocalStaticInMethod(); // 第一次调用  
    obj1.incrementLocalStaticInMethod(); // 第二次调用,值会增加  
  
    // 通过类名调用静态方法,演示类静态变量的使用  
    MyClass::incrementClassStaticVar(); // 第一次调用  
    MyClass::incrementClassStaticVar(); // 第二次调用,值会增加  
  
    // 再次创建MyClass对象,查看构造函数中全局静态变量的变化  
    MyClass obj2;  
  
    return 0;  
}

在这个例子中:

  • globalStaticVar 是一个全局静态变量,它在整个程序中只被初始化一次,并且对所有函数和对象都可见。
  • MyClass 类包含一个类静态变量 classStaticVar,它属于类本身而不是类的任何特定实例。所有该类的实例共享这个静态变量。
  • MyClass 类中的 incrementLocalStaticInMethod 方法演示了如何在函数内部使用局部静态变量。注意,虽然这个变量是通过类的方法访问的,但它实际上是在每次方法调用时都在函数内部进行初始化和管理的。
  • main 函数中展示了如何修改全局静态变量、通过对象调用方法以演示局部静态变量的使用,以及通过类名调用静态方法来演示类静态变量的使用。

运行这段代码将输出类似以下内容(具体数字可能因编译器或运行时环境而异):

Global static variable in main before object creation: 1  
Global static variable before construction: 2  
Local static variable in method: 1  
Local static variable in method: 2  
Class static variable: 1  
Class static variable: 2  
Global static variable before construction: 3

注意,局部静态变量的初始化只发生在第一次调用函数时,之后调用函数时它会保留其值。类静态变量和全局静态变量在整个程序运行期间都存在,并且它们的值会在整个程序中持续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值