c++之静态变量

本文深入探讨了C++中静态局部变量的定义、作用域、生存期以及与普通局部变量的区别。通过实例展示了如何在函数内部声明静态局部变量,并解释了其在多次函数调用之间的值保持不变的特性。此外,还讨论了静态局部变量在解决特定编程问题时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>

using namespace std;

int &f( )
{
    static int i=2;            // i 为静态变量,相当于全局变量,他会保存上一次调用后的值直到再次调用,改变他的值
    return ++i;
}
int g()
{
    int j=2;
    return ++j;
}


int main()
{
    int &ri=f();    //函数返回的是一个引用,因此需要一个引用变量来承接
    int rj=g();
    ri=f();
    rj=g();
    cout<<"ri="<<ri<<endl<<"rj="<<rj;
    return 0;
}
### C++ 中 `static` 静态变量的使用方法和特性 #### 1. 定义与初始化 在 C++ 中,静态成员变量属于类本身而非某个特定的对象。因此,即使没有创建任何对象,也可以通过类名访问该静态成员变量。静态成员变量需要在类外部进行定义并初始化。 ```cpp class MyClass { public: static int myStaticVar; // 声明静态成员变量 }; int MyClass::myStaticVar = 0; // 类外定义并初始化静态成员变量[^1] ``` #### 2. 访问方式 静态成员变量可以通过类名加作用域解析运算符 (`::`) 来访问,而不需要依赖具体的类实例。 ```cpp MyClass::myStaticVar = 42; std::cout << MyClass::myStaticVar << std::endl; ``` #### 3. 生命周期 静态成员变量在整个程序运行期间都存在,其生命周期从第一次被初始化到程序结束为止。这意味着它不会随着类的实例销毁而消失。 #### 4. 存储位置 静态成员变量存储在全局数据区,而不是栈或堆上。这使得它们的行为类似于全局变量,但在命名空间方面更加安全,因为它们仍然隶属于类的作用域内[^2]。 #### 5. 对象无关性 由于静态成员变量不属于任何一个具体对象,所以在访问时无需创建类的实例即可操作这些变量。这也意味着多个对象共享同一个静态成员变量的状态变化。 #### 6. 结合静态函数使用 当静态成员函数需要访问某些状态时,它可以仅限于访问其他静态成员(包括静态成员变量和其他静态成员函数),因为它不具备隐式的 `this` 指针来关联至某一特定对象。 ```cpp class MyClass { public: static int myStaticVar; static void setStaticVar(int value) { myStaticVar = value; // 只能修改静态成员变量 } }; int MyClass::myStaticVar = 0; // 调用静态函数设置静态变量值 MyClass::setStaticVar(10); std::cout << MyClass::myStaticVar << std::endl; ``` --- ### 总结 静态成员变量具有以下特点: - 属于整个类而不属于单个对象; - 在类外部完成定义和初始化; - 不随对象的创建或销毁改变其生命周期; - 支持跨对象间的数据共享; - 只能由静态成员函数直接访问,或者通过显式调用来间接影响非静态部分。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值