C++共享和保护——(2)生存期
归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
生命如同寓言,其价值不在于长短,而在与内容!
一起加油!
目录
?
一、前言:
????????每个对象(变量)都有生存期。生存期就是程序执行时,对象(变量)存在(存活)的那段时间。
????????对象的生存期可以分为静态生存期和动态生存期两种。在函数外部定义的全局对象在整个程序执行的过程中都有效,这些对象从程序运行开始“诞生”直到程序结束“死亡”,这类对象都具有静态生存期;局部对象的生存期取决于定义的方式,有动态生存期和静态生存期两种。
二、动态生存期:
?????????声明在块中的普通的局部对象,生存期从声明点开始,结束于声明所在的块执行完毕之时,几有动态生存期的对象,其存储空间在执行到块的时候被分配,块执行完毕后,对象生存期结束,空间被收回。
三、静态生存期:
????????如果对象的生存期与程序的运行期相同,则称它具有静态生存期。在命名空间作用域中声明的对象都是具有静态生存期的。局部对象如果要具有静态生存期,则需要用到关键字 static。例如.下列语句定义的变量 i 便是具有静态生存期的变量,也被称为静态变量:
static int i;
?????????静态局部对象的特点是:
- ?(1)每个静态局部对在第一次被执行之前进行初始化;
- ?(2)静态局部对象在整个程序运行过程中一直存在,直到程序运行结束才消亡。
也就是说,如果在一个函数中定义了静态局部对象,当函数返回后,该变量空间不会消失,还保留着上一次存储的值,下一次再调用函数时在上一次所存储的值的基础上进行处理或运算,该变量在每次函数调用间实现数据共享。
💦例:利用静态成员在函数内部统计函数被调用了几次。?
#include<iostream>
using namespace std;
int count_calls(){
static int count=0;
count++;
return count;
}
int main(){
int i;
for(i=0;i<10;i++){
cout<<count_calls()<<",";
}
return 0;
}
- ?(1)标识符的作用域是指在程序中的某个位置哪些标识符是可见的。
- ?(2)对象的生存期是指在程序执行过程中,对象一直存在。
💦例:变量的生存期与可见性。?
#include<iostream>
using namespace std;
int i=0;//i为全局变量,具有静态生存期
void other(){
//a,b为静态局部变量,具有静态生存期,在函数内部可见第一次进入other()函数时被初始化
static int a=2;
static int b;
int c=10;//c为局部变量,具有动态生存期,每次进入函数时都初始化
a+=2;
i+=32;
c+=5;
cout<<"----other----"<<endl;
cout<<"i:"<<i<<" a:"<<a<<" b:"<<b<<" c:"<<c<<endl;
b=a;
}
int main(){
static int a;//a为静态局部变量,具有全局生命期,局部可见
//b,c为局部变量,具有动态生存期,局部可见
int b=-10;
int c=0;
cout<<"----main----"<<endl;
cout<<"i:"<<i<<" a:"<<a<<" b:"<<b<<" c:"<<c<<endl;
c+=8;
other();
cout<<"----main----"<<endl;
cout<<"i:"<<i<<" a:"<<a<<" b:"<<b<<" c:"<<c<<endl;
i+=10;
other();
return 0;
}
四、总结:?
- 每个对象(变量)都有生存期。
- 对象的生存期可以分为静态生存期和动态生存期两种。
- 如果对象的生存期与程序的运行期相同,则称它具有静态生存期。
- 每个静态局部对在第一次被执行之前进行初始化。
- 静态局部对象在整个程序运行过程中一直存在,直到程序运行结束才消亡。
- 标识符的作用域是指在程序中的某个位置哪些标识符是可见的。
- 对象的生存期是指在程序执行过程中,对象一直存在。
?五、共勉:
????????以上就是我对C++共享和保护——(2)生存期的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++共享和保护的理解,请持续关注我哦!!!?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!