C++共享和保护——(2)生存期

2023-12-13 23:50:09

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
生命如同寓言,其价值不在于长短,而在与内容!

一起加油!

目录

一、前言:

二、动态生存期:

三、静态生存期:

💦例:利用静态成员在函数内部统计函数被调用了几次。?

💦例:变量的生存期与可见性。?

四、总结:?

?五、共勉:


?

一、前言:

????????每个对象(变量)都有生存期。生存期就是程序执行时,对象(变量)存在(存活)的那段时间。
????????对象的生存期可以分为静态生存期和动态生存期两种。在函数外部定义的全局对象在整个程序执行的过程中都有效,这些对象从程序运行开始“诞生”直到程序结束“死亡”,这类对象都具有静态生存期;局部对象的生存期取决于定义的方式,有动态生存期和静态生存期两种。

二、动态生存期:

?????????声明在块中的普通的局部对象,生存期从声明点开始,结束于声明所在的块执行完毕之时,几有动态生存期的对象,其存储空间在执行到块的时候被分配,块执行完毕后,对象生存期结束,空间被收回。

三、静态生存期:

????????如果对象的生存期与程序的运行期相同,则称它具有静态生存期。在命名空间作用域中声明的对象都是具有静态生存期的。局部对象如果要具有静态生存期,则需要用到关键字 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++共享和保护的理解,请持续关注我哦!!!?

文章来源:https://blog.csdn.net/2301_80585598/article/details/134983956
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。