news 2026/3/11 5:53:21

C++的第十四天笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++的第十四天笔记

存储持续性、作用域和链接性

C++使用三种(C++11四种)不同方案存储数据。这些方案的区别在于数据保留在内存中的时间。

  • 自动存储持续性:在函数定义中声明的变量(包括函数参数),程序执行所属函数 / 代码块时创建,执行完毕后内存被释放。

  • 静态存储持续性:函数定义外的变量或使用static修饰的变量。程序整个运行过程中始终存在。

  • 线程存储持续性:用thread_local关键字声明的变量。与所属线程的生命周期一致。

  • 动态存储持续性:用new运算符分配的内存,直到用delete运算符释放,或程序结束时才消失。

作用域和链接

作用域描述了名称在文件的多大范围可见。分为全局作用域和局部作用域。

标准 C++ 中,全局作用域等价于 “一个隐式的匿名名称空间”,它满足名称空间作用域的所有规则(比如作用域隔离、标识符查找规则),但没有显式的名称 。

自动存储持续性

在默认情况下,在函数内部声明的函数参数和变量的持续性为自动,作用域为局部(可以进入{},但不能出{}),没有链接性。代码块中定义的变量类似。

do while块内定义的变量不能使用于判定条件,因为判定条件处于{}外,不可以出作用域使用。

可以在函数里面单独使用{},这种被成为空代码块。作用是创建独立块作用域。即使块内没有代码也是合法规范的。

自动变量和栈
  • 栈用两个指针跟踪:栈底(栈的起始位置)、栈顶(指向下一个可用内存单元)。

  • 函数调用时:自动变量被加入栈中,栈顶指针指向变量占用的内存。

  • 函数结束时:栈顶指针重置为函数调用前的值,释放自动变量的内存(变量值不再被标记,但内存未被主动清除)。

寄存器变量

register最初是由C语言引入的,它建议编译器使用CPU寄存器来存储自动变量。这旨在提高访问变量的速度。在C++中C++11之前延续这一用法。在C++11中,关键字register只是显示指出变量是自动的(与C中auto的用法完全相同)。

静态持续变量

和C语言一样,C++也为静态存储持续性变量提供了3种链接性:

  • 外部链接性(可在其他文件中访问):必须在代码块(即函数)外部声明。

  • 内部链接性(只能在当前文件中访问):必须在代码块的外部声明它,并且使用关键字static。

  • 无链接性(只能在当前函数或代码块中访问):必须在代码块的内部声明它,并且使用关键字static。

它们的生命周期与程序相同。编译器将分配固定的内存块来存储所有静态变量。

静态变量默认0初始化。指针使用空指针初始化。(大多数系统空指针是0,C++只规定了空指针不指向任何一个对象,少数早期系统空指针可能不是0)。

静态存储持续性、外部链接性

链接性为外部的变量通常简称为外部变量,它们的存储持续态为静态,作用域为整个文件。

单定义规则

C++允许同一标识符被声明多次,但只能被定义一次。C++提供了两种声明。定义声明引用声明

引用声明使用关键字extern,且不进行初始化,否则声明为定义,会分配空间。

如果要在多个文件种使用外部变量,只需在一个文件中包含该变量的定义,但在使用该变量的其他所有文件中,都必须使用extern声明它。

注:可以有多个变量的名称相同,例如不同函数中声明的同名变量是彼此独立的。另外,局部同名变量可以隐藏全局同名变量。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/8 22:24:12

探索近乎完全消光的圆二色超反射镜与圆偏振光设置

近乎完全消光的圆二色超反射镜 圆偏振光的设置在光学领域,圆二色超反射镜以及圆偏振光的相关研究一直是极具吸引力的方向。今天咱们就来聊聊近乎完全消光的圆二色超反射镜以及圆偏振光的设置那些事儿。 近乎完全消光的圆二色超反射镜 圆二色性(CD&#…

作者头像 李华
网站建设 2026/3/8 14:16:01

Wan2.2-T2V-A14B用于城市交通流量模拟可视化展示

Wan2.2-T2V-A14B:让城市交通“动”起来的AI视觉引擎 你有没有想过,未来的交通指挥中心不再是一堆密密麻麻的折线图和数字报表,而是一块块高清大屏上实时“播放”的动态街景?车流如织、红绿灯切换、公交专用道畅通无阻——这一切不…

作者头像 李华
网站建设 2026/3/9 19:56:57

Docker + 多模态Agent = 王炸组合?5个真实生产环境编排案例深度剖析

第一章:Docker与多模态Agent融合的架构演进随着人工智能系统向复杂化、分布式方向发展,Docker容器技术与多模态Agent系统的融合成为现代智能架构的重要演进路径。该融合模式通过容器化封装实现多模态感知、决策与执行模块的解耦,提升系统可扩…

作者头像 李华
网站建设 2026/3/4 0:07:19

你用过哪些国产实时数据库?

随着中国数字经济加速发展,国产数据库正从政策驱动的“替代”走向技术创新驱动的“超越”。在这样一个快速增长的市场中,实时数据库作为连接工业现场与信息系统的关键桥梁,其重要性日益凸显。而在这个细分赛道中,大庆紫金桥软件技…

作者头像 李华
网站建设 2026/3/5 21:52:59

Android v4l2 camera apk:快速实现摄像头调试的终极工具

Android v4l2 camera apk:快速实现摄像头调试的终极工具 【免费下载链接】Androidv4l2cameraapk资源介绍 Android v4l2 camera apk是一款专为开发者设计的摄像头功能实现工具,支持在Android设备上进行摄像头预览和调试。它兼容多种Android版本&#xff0…

作者头像 李华
网站建设 2026/3/9 22:13:00

【STM32】低功耗

目录1 什么是低功耗?2 STM32电源系统结构3 低功耗模式介绍3.1 睡眠模式(sleep mode)3.2 停机模式(stop mode)3.3 待机模式(standby mode)4 寄存器及库函数介绍小实验:低功耗实验1 什…

作者头像 李华