欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 【笔记】【C++】【基础语法】作用域(scope)、持续时间(duration)和链接(linkage)

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

2025/4/24 1:37:31 来源:https://blog.csdn.net/weixin_45795947/article/details/147338676  浏览:    关键词:【笔记】【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 };文件作用域静态持续时间外部链接必须初始化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词