当前位置: 首页 > news >正文

【C++】6.1.1 局部对象

笔记内容 参考借鉴了 电子工业出版社 王刚 译 的《C++Primer》第5版 P205内容。

读者有兴趣的可以自行浏览原文,想必会有更深的体会和收获。

在C++中,常常提到对象的 作用域生命周期 这两个概念。

通俗来说,作用域就是这个对象的作用范围,在哪个区域内可以使用,到哪里又不能使用,表达的是这个对象名字能不能被使用的程序区间。

生命周期是在程序执行过程中,该对象存在的一段时间,从哪里开始被定义,又到何时会消亡。

局部变量(local variable)就是作用域只有程序的某一部分的变量,相反的,作用在几乎整个程序区间内的变量就叫全局变量。比如在函数体重定义的变量以及函数形参,这些变量都称为局部变量一般来说,这些变量在离开作用域以后就会消亡。

但是有些时候,需要延迟局部对象的生命周期,从而使得该变量可以在函数调用以后还可以使用,或者下一次调用函数时依然可以生效,这就需要用到局部静态对象。

局部静态对象需要在定义的类型前面加上关键字 static,局部静态对象在程序的执行路径上第一次初始化定义后,不会再被初始化定义,直到程序终止才被销毁。

比如,count_calls是一个记录该函数被调用次数的函数,其中加入了一个局部静态变量ctr,其在该函数的调用时,只会初始化一次,而且每次都会继承上一次执行完的结果:

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

int main()
{
	for (size_t i = 0; i < 10; ++i)
	{
		cout << count_calls() << endl;
		cout<< ctr << endl;//错误,ctr是静态局部变量,作用域依然是局部范围,因此无法在外部被使用
	}
	return 0;
}

最终打印结果如下:

局部对象在应该进行初始化,如果在函数内的内置类型局部变量没有进行初始化,则会执行默认初始化,这将导致该变量的值是随机的。然而,局部静态对象如果没有显式的初始值,内置类型的局部静态默认初始化的值为0。

相关文章:

  • 操作系统知识点23
  • 【语料数据爬虫】Python爬虫|批量采集会议纪要数据(1)
  • Spring Cloud之注册中心之Nacos负载均衡
  • 【二】JavaScript能力提升---this对象
  • 烧结银遇上HBM:开启存储新时代
  • HTML 文本格式化
  • Docker 学习笔记:从入门到部署,实战演练全流程!
  • SpringBoot 自定义异常处理
  • 【HarmonyOS Next】鸿蒙加固方案调研和分析
  • 祝福语【算法赛】
  • ESP32驱动OV3660摄像头实现物体轮廓识别(摄像头支持红外夜视、边缘AI计算)
  • C++常用函数
  • SpringBoot统一响应类型3.1.1版本
  • 初识大模型——大语言模型 LLMBook 学习(一)
  • 计算机网络传输层
  • 电子学会—2024年月6青少年软件编程(图形化)四级等级考试真题——水仙花数
  • Python 动态规划(DP)套路总结
  • UE5从入门到精通之如何创建自定义插件
  • (数据结构)双向链表
  • 2025-03-09 学习记录--C/C++-PTA 习题11-1 输出月份英文名
  • 城市建设网站鹤岗市/网站热度查询
  • 黔东南企业网站建设/电商网站怎样优化
  • 如何做监控网站/龙泉驿网站seo
  • 网站信息可以/网络科技有限公司
  • 做搜狗网站优化排名软/360指数查询工具
  • 长沙哪里做网站好/如何自己建立一个网站