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

【笔记】【C++】【基础语法】作用域(scope)、持续时间(duration)和链接(linkage)

【笔记】【C++】【基础语法】作用域(scope)、持续时间(duration)和链接(linkage)

最近正在复习+学习C++(查漏补缺ing)。记录一下学习所得。希望能将所学都整理成一系列的笔记和博客。优先记录到自己的笔记中,有空就搬运到博客。

学习参考网站:learncpp 7.1-7.12

这次学习的内容是:作用域、持续时间和链接。这三个概念和变量或标识符(包含变量、类型和函数)有着密切的关系。

1. 作用域(scope)

主要用来指明变量起作用的范围。
作用域主要有两类:块作用域(局部作用域)文件作用域(全局作用域)

  • 块作用域:标识符只在当前所在的块中可见。例如局部变量、函数参数、在块内声明的程序定义的类型定义(例如枚举和类)。
  • 文件作用域:标识符在当前所在文件的整个范围内都可见。例如全局变量、函数、在命名空间内或全局范围内声明的程序定义的类型定义(例如枚举和类)

2. 持续时间 (duration)

持续时间(duration)(不知道这个的专业术语叫什么,目前都先叫持续时间。)指的是变量创建到销毁的整个持续时间

持续时间可以分为三类:自动持续时间静态持续时间动态持续时间.

  • 自动持续时间:变量从声明时创建,到当前块的末尾销毁。例如函数形参,局部变量。
  • 静态持续时间:变量从程序开始时创建,一直到程序结束时销毁。例如全局变量、静态局部变量。
  • 动态持续时间:变量由程序员决定创建和销毁。例如动态分配的变量。

不同的持续时间也可以表现出不同类型的变量的一个生命周期。

3. 链接(linkage)

链接用于标识当前标识符(变量、类型或函数)是否可以在其他文件中可见。

链接有三种:无链接内部链接外部链接

  • 无链接:表明该标识符独一无二,不会被链接使用。例如局部变量、在块内声明的程序定义的类型标识符(例如枚举和类)。
  • 内部链接:表明该标识符只会在当前文件中使用,其他文件中无法访问该标识符。例如静态全局变量(已初始化或未初始化)、静态函数、全局变量、未命名的命名空间及其中定义的任何内容。
  • 外部链接:表明该标识符会在其他文件中使用。例如非静态函数、非常量全局变量(已初始化或未初始化)、全局变量、内联 const 全局变量、命名空间。

4. 总结

类型例子作用域持续时间链接笔记
局部变量int x;块作用域自动持续时间无链接
静态局部变量static int s_x;块作用域静态持续时间无链接
动态局部变量int* x { new int{} };块作用域动态持续时间无链接
函数参数void foo(int x);块作用域自动持续时间无链接
内部 non-const 全局变量static int g_x;文件作用域静态持续时间内部链接可以已初始化或未初始化
外部 non-const 全局变量int g_x;文件作用域静态持续时间外部链接可以已初始化或未初始化
内联 non-const 全局变量 (C++17)inline int g_x;文件作用域静态持续时间外部链接可以已初始化或未初始化
内部常量全局变量constexpr int g_x { 1 };文件作用域静态持续时间内部链接必须初始化
外部常量全局变量extern const int g_x { 1 };文件作用域静态持续时间外部链接必须初始化
内联常量全局变量 (C++17)inline constexpr int g_x { 1 };文件作用域静态持续时间外部链接必须初始化

相关文章:

  • ChatGPT-o3辅助学术大纲效果如何?
  • 【linux学习】 Redhat9.5安装
  • 【单倍型理解及计算系列之一】单倍型基本概念以及检测原理
  • 桌面级OTA测试解决方案:赋能智能网联汽车高效升级
  • IO流(二)
  • Flink 2.0 编译
  • 高频面试题:Android MVP/MVVM/MVI这几种架构在实际生产中,各自的优缺点和适用场景是什么
  • [滑动窗口]209. 长度最小的子数组
  • 【算法笔记】整除与最大公约数(GCD)专题整理
  • 【多目标进化算法】NSGA-II 算法(结合例子)
  • 表格RAG技术实战指南
  • 如何使用 DeepSeek 帮助自己的工作?
  • 【c语言】深入理解指针3——回调函数
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)真题
  • 非比较排序——计数排序
  • GitHub创建远程仓库
  • 【Win】 cmd 执行curl命令时,输出 ‘命令管道位置 1 的 cmdlet Invoke-WebRequest 请为以下参数提供值: Uri: ’ ?
  • 力扣刷题Day 20:柱状图中最大的矩形(84)
  • 万物对接大模型:【爆火】MCP原理与使用指南
  • 广东水利水电安全员 B 证考试精选题
  • 言短意长|把水搅浑的京东和美团
  • 文旅部:今年中国旅游日活动合作单位扩大至60多家
  • 贵州赤水“整改复耕”:为何竹林砍了,地却荒了?
  • 天工机器人获首个人形机器人半马冠军
  • 我国成功发射试验二十七号卫星01星~06星
  • 观察|如何推动再保险交易规模上量增加话语权,行业在临港新片区共倡议