网站建设礼品,大连工业大学本科招生信息网,苏州高新区建设局网站管网,总代理项目文章目录 1. 在函数内#xff08;局部静态变量#xff09;2. 在类中的静态成员变量3. 在类中的静态成员函数4. 在文件/模块中的静态变量或函数总结 1. 在函数内#xff08;局部静态变量#xff09;
当 static 用于函数内的局部变量时#xff0c;该变量的生命周期变为整个… 文章目录 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; // 仅在该文件内可见特点
用于控制文件级别的可见性避免名称冲突。文件内的其他函数可以访问它但外部文件无法访问。
总结
局部静态变量跨函数调用保持值生命周期为整个程序运行期。类静态成员类级别的共享成员可以不通过实例访问。文件静态变量/函数限制变量和函数的作用域到定义它的文件中避免外部访问。