首页 > 编程笔记

C++ static静态变量详解

在 C++ 语言中,static 关键字用于创建静态变量。与普通的局部变量和全局变量相比,静态变量有一些独特的特性和应用场景。

静态变量分两种,一种是函数内的静态变量,一种是全局的静态变量,其特点是变量定义时带有 static 关键字。例如:
static int gVar; // 在函数外,定义全局的静态变量

void myFunction() {
    static int iVar; // 在函数内,定义局部的静态变量
}

局部静态变量

函数内的静态变量也称为局部静态变量,其作用域只限于函数内部,别的函数不能访问。

局部静态变量存储在全局数据区,只允许初始化一次,但它的生命周期和全局变量一样,自它们被定义时就一直存在,直到程序结束时才会被销毁。

举个简单的例子:
#include <iostream>

void counter() {
    static int count = 0;  // 静态局部变量
    count++;
    std::cout << "Count: " << count << std::endl;
}

int main() {
    counter();  // 输出:Count: 1
    counter();  // 输出:Count: 2
    counter();  // 输出:Count: 3
    return 0;
}
执行结果为:

Count: 1
Count: 2
Count: 3

在这个例子中,count 是一个静态局部变量,它只能初始化一次,所以即便调用 counter() 函数多次,代码static int count=0;只执行一次,即 count 的值不会被重复地初始化为 0。从运行结果可以看出,count 的值在连续的函数调用之间是累积的。

全局静态变量

如果在全局作用范围内使用 static 关键字定义变量,则该变量成为全局静态变量。

静态全局变量的特点是:变量的作用域仅限于定义它的源文件中,而不是整个项目中的所有源文件。

举个简单的例子:
// main.cpp
#include <iostream>

int globalVar = 10; // 全局变量
static int globalStaticVar = 100;  // 静态全局变量

int main() {
    //...
    return 0;
}
示例程序位于 main.cpp 源文件中,globalVar 是普通的全局变量,globalStaticVar 是静态全局变量。

假设项目中还有一个名为 file.cpp 的源文件:

总结

在 C++ 中,和其它类型的变量相比,静态变量具有以下这些特性:
静态变量在 C++ 编程中具有多种用途,包括维护函数或方法调用之间的状态、限制变量的作用范围以提高封装性,以及在类级别共享数据。正确使用静态变量,能编写出更高效、可维护的代码。

推荐阅读