归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
生命如同寓言,其价值不在于长短,而在与内容!
一起加油!
目录
一、前言:
二、动态生存期:
三、静态生存期:
💦例:利用静态成员在函数内部统计函数被调用了几次。
💦例:变量的生存期与可见性。
四、总结:
五、共勉:
一、前言:
每个对象(变量)都有生存期。生存期就是程序执行时,对象(变量)存在(存活)的那段时间。
对象的生存期可以分为静态生存期和动态生存期两种。在函数外部定义的全局对象在整个程序执行的过程中都有效,这些对象从程序运行开始“诞生”直到程序结束“死亡”,这类对象都具有静态生存期;局部对象的生存期取决于定义的方式,有动态生存期和静态生存期两种。
二、动态生存期:
声明在块中的普通的局部对象,生存期从声明点开始,结束于声明所在的块执行完毕之时,几有动态生存期的对象,其存储空间在执行到块的时候被分配,块执行完毕后,对象生存期结束,空间被收回。
三、静态生存期:
如果对象的生存期与程序的运行期相同,则称它具有静态生存期。在命名空间作用域中声明的对象都是具有静态生存期的。局部对象如果要具有静态生存期,则需要用到关键字 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++共享和保护的理解,请持续关注我哦!!!