Static修饰词

在C和C++编程语言中,static关键字的使用非常广泛,并且具有多种不同的用途。下面将详细介绍如何在这些编程语言中使用static关键字。

1. 局部静态变量

在函数内部声明的静态变量是局部的,但其生命周期贯穿整个程序运行期间。这意味着,即使函数执行完毕,这些变量的值也会保留,直到程序结束。

#include <stdio.h>

void func() {
    static int count = 0; // 静态局部变量
    printf("Count is %d\n", count++);
}

int main() {
    func(); // 输出: Count is 0
    func(); // 输出: Count is 1
    return 0;
}

在这个例子中,count是一个静态局部变量,它在func函数第一次被调用时初始化,并且在之后的调用中保持其值。

2. 静态全局变量

在全局作用域中声明的静态变量只能在声明它的文件(或翻译单元)内部访问。

// file1.c
static int globalVar = 10; // 只能在file1.c中访问

void printGlobalVar() {
    printf("%d\n", globalVar);
}

// file2.c
// 在这里不能访问globalVar,因为它在file1.c中是静态的

3. 静态函数

在函数声明前加上static关键字,可以限制该函数只在声明它的文件内部可见。

// file1.c
static void myFunction() {
    // 函数体
}

// 在file1.c的其他地方可以调用myFunction()
// 但在其他文件中不能调用,因为它被声明为static

4. 类的静态成员变量和静态成员函数(C++特有)

在C++中,static可以用于类的成员变量和成员函数,表示这些成员属于类本身而非类的某个特定对象。

#include <iostream>

class MyClass {
public:
    static int staticVar; // 静态成员变量
    static void staticFunc() { // 静态成员函数
        std::cout << "Static function called" << std::endl;
    }
};

// 必须在类外部初始化静态成员变量
int MyClass::staticVar = 0;

int main() {
    MyClass::staticFunc(); // 通过类名调用静态成员函数
    std::cout << MyClass::staticVar << std::endl; // 访问静态成员变量
    
    // 注意:静态成员函数不能访问非静态成员变量或成员函数
    // MyClass::nonStaticFunc(); // 错误,如果定义了nonStaticFunc的话
    
    return 0;
}

注意事项

  • 静态变量(无论是局部的还是全局的)在程序启动时初始化一次,并在程序结束时销毁。
  • 静态局部变量在函数调用之间保持其值,但每次程序启动时都会重新初始化。
  • 静态全局变量和静态函数在声明它们的文件(或翻译单元)内是可见的,但在其他文件中不可见。
  • 类的静态成员变量和静态成员函数与类本身相关联,而不是与类的任何特定对象相关联。静态成员函数不能访问类的非静态成员变量或非静态成员函数。
  • 在多线程程序中,对静态局部变量的访问可能需要同步机制来避免数据竞争。
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值