当前位置: 首页 > 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 };文件作用域静态持续时间外部链接必须初始化
http://www.xdnf.cn/news/15157.html

相关文章:

  • OpenStack Yoga版安装笔记(22)Swift笔记20250418
  • 【Java面试系列】Spring Boot微服务架构下的分布式事务设计与实现详解 - 3-5年Java开发必备知识
  • 浏览器的存储机制 - Storage
  • 元宇宙概念兴起,B 端数字孪生迎来哪些新机遇?
  • leetcode-sql数据库面试题冲刺(高频SQL五十题)
  • 03、GPIO外设(三):标准库代码示例
  • 第11篇:Linux程序访问控制FPGA端HEX<四>
  • 服务器架构:SMP、NUMA、MPP及Docker优化指南
  • U盘实现——双盘符实现
  • GoogleCodeUtil.java
  • Next.js 技术详解:构建现代化 Web 应用的全栈框架
  • ArcPy工具箱制作(下)
  • 51单片机实验一:点亮led灯
  • 每日一题---移动零
  • 第六章 进阶04 尊重
  • GreatSQL启动崩溃:jemalloc依赖缺失问题排查
  • 获取印度股票市场列表、查询IPO信息以及通过WebSocket实时接收数据
  • Git合并分支的两种常用方式`git merge`和`git cherry-pick`
  • 裸金属服务器有什么用途?
  • 数据仓库分层架构解析:从理论到实战的完整指南​​
  • 1. python开发小笔记
  • 【Semantic Kernel核心组件】planner:大模型时代的智能任务编排引擎
  • ASP.NET常见安全漏洞及修复方式
  • ARINC818协议(五)
  • xxljob 执行器流程-笔记
  • PHP腾讯云人脸核身生成 SDK 接口调用步骤使用签名
  • Vue3中provide和inject的用法示例
  • opencv函数展示3
  • Git LFS 学习笔记:原理、配置、实践与心路历程
  • 直播人脸美型核心技术详解:卷积神经网络与图像增强在美颜SDK中的应用