自动对象和静态局部变量的区别

原文链接:https://blog.csdn.net/Mary19920410/article/details/70172303

1、自动对象

默认情况下,局部变量的生命期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象称为自动对象。自动对象在每次调用函数时创建和撤销。该类型局部变量存储在栈上,在动态存储区。

局部变量所对应的自动对象在函数控制经过变量定义语句时创建。如果在定义时提供了初始化,那么每次创建对象时,对象都会被赋予指定的初值。对于未初始化的内置类型局部变量,其初值不确定。当函数调用时,自动对象就会被撤销。

形参也是自动对象,其所占存储空间在函数调用时被创建,在函数结束时撤销。

2、静态局部对象

用static关键字修饰的局部变量。静态局部变量存储在静态存储区,生命期贯穿整个程序运行期间。作用域同自动局部变量。

静态局部对象在所处模块初次运行时进行初始化工作,且只初始化一次。如果不初始化,编译器会自动为其赋初始值为0或空字符

例如:

#include <iostream>

using namespace std;

void test(){
    //自动对象和静态局部变量的作用域一样,都在函数体内,但生存周期不同
    int a = 1;    //自动对象(普通局部变量)
    static int b;   //静态局部变量,存储在静态存储区
    int c;         //未初始化的内置类型局部变量,其初值不确定
    static int d;   //默认初值0
    cout<<"c: "<<c<<"d: "<< d <<endl;
}

size_t count_calls(){
    static size_t ctr = 0;
    return ++ ctr;
}

int main(){
    test();
    for(size_t i = 0; i != 10; i ++)
        cout << count_calls()<<endl;
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值