【C++】static作用总结

1. 在函数内(局部静态变量)

static 用于函数内的局部变量时,该变量的生命周期变为整个程序的运行期间,而不是在每次进入和退出函数时创建和销毁。它的初始化仅在第一次调用函数时发生。

void func() {
    static int count = 0;  // 变量只初始化一次
    count++;
    std::cout << "Count: " << count << std::endl;
}

特点:

  • 变量在函数结束后不会被销毁,依然保持其值。
  • 只在函数第一次调用时初始化。
  • 作用域依然是函数内部,外部无法访问。

2. 在类中的静态成员变量

类的静态成员变量在整个类中是共享的,而不是每个对象都拥有一份。它属于类,而不是类的实例。

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

int MyClass::count = 0;  // 静态成员变量定义

特点:

  • 所有对象共享同一个静态成员变量。
  • 可以通过类名直接访问 MyClass::count,无需创建对象。
  • 生命周期贯穿程序整个执行期。

3. 在类中的静态成员函数

类的静态成员函数不能访问非静态的成员变量或成员函数,因为它们不属于任何对象。它们同样可以通过类名直接调用。

class MyClass {
public:
    static void print() {
        std::cout << "Static member function" << std::endl;
    }
};

特点:

  • 不依赖于具体对象,可以直接通过类名调用。
  • 不能访问类的非静态成员(除非通过对象或指针访问)。

4. 在文件/模块中的静态变量或函数

static 用于全局变量或函数时,它将限制该变量或函数的作用域仅在定义它的文件中。也就是说,其他文件不能直接访问它们。

static int counter = 0;  // 仅在该文件内可见

特点:

  • 用于控制文件级别的可见性,避免名称冲突。
  • 文件内的其他函数可以访问它,但外部文件无法访问。

总结

  • 局部静态变量:跨函数调用保持值,生命周期为整个程序运行期。
  • 类静态成员:类级别的共享成员,可以不通过实例访问。
  • 文件静态变量/函数:限制变量和函数的作用域到定义它的文件中,避免外部访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值