【C++】static作用总结
文章目录
- 1. 在函数内(局部静态变量)
- 2. 在类中的静态成员变量
- 3. 在类中的静态成员函数
- 4. 在文件/模块中的静态变量或函数
- 总结
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; // 仅在该文件内可见
特点:
- 用于控制文件级别的可见性,避免名称冲突。
- 文件内的其他函数可以访问它,但外部文件无法访问。
总结
- 局部静态变量:跨函数调用保持值,生命周期为整个程序运行期。
- 类静态成员:类级别的共享成员,可以不通过实例访问。
- 文件静态变量/函数:限制变量和函数的作用域到定义它的文件中,避免外部访问。