EasyC++,自动存储持续性

存储 存储软件 后端
这个概念乍一看有些拗口,其实它很简单,指的是在函数定义中声明的变量的存储持续性是自动的:它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。

[[436905]] 

大家好,我是梁唐。

想要追求更好阅读体验的同学,可以点击「阅读原文」访问github仓库。

自动存储持续性

这个概念乍一看有些拗口,其实它很简单,指的是在函数定义中声明的变量的存储持续性是自动的:它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。

在默认情况下,我们在函数中声明的变量和函数的参数都是自动存储持续性,它的作用于为局部,没有链接性。

这里的链接性描述了名称如何在不同的单元之间共享,链接性为外部的名称可以在文件之间共享,链接性为内部的名称只能由一个车文件中的函数共享。自动变量的名称没有链接性,也就是不能共享。

这段话是一段专业性描述,看不太明白没有关系。简单理解,就是说如果我们在main函数当中声明了一个变量a,并且在函数test当中也声明了一个同样的变量a。两者之间是完全独立的,彼此不会有任何影响,因为它们只有在声明了它的函数中才能使用。

当程序执行test函数时,test中的a才被创建,当test执行结束,a即被销毁。

其实变量的作用域的最小划分并不是函数,而是代码块。我们在代码块当中创建的变量,它的使用范围作用域就只有当前代码块。例如:

  1. int main() { 
  2.  int a = 4; 
  3.     { 
  4.         int b = 10; 
  5.     } 

我们在main函数当中定义了一个变量a和一个变量b,但是这两个变量定义的位置不同。b定义在了一个代码块(代码块使用花括号表示)当中,对于a来说,它的作用域是整个main函数,而b只在花括号当中生效。

更有意思的是下面这段代码:

  1. int main() { 
  2.     int a = 4; 
  3.     { 
  4.         int a = 5; 
  5.         cout << a << endl; 
  6.     } 
  7.     cout << a << endl; 

答案是输出的结果是5和4,为什么呢?

因为内部和外部都有一个变量a,当执行内部代码的时候,编译器隐藏了外部的定义。而程序离开代码块时,外部的定义又重新恢复。

本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。

 

责任编辑:武晓燕 来源: Coder梁
相关推荐

2021-11-27 11:50:09

C++静态持续

2021-12-29 20:31:40

C++多态指针

2021-12-12 18:13:54

C++This指针

2021-11-30 11:04:36

C++函数语言

2021-12-09 10:56:50

函数C++原型

2021-11-26 00:03:20

C++编译常量

2021-12-01 10:50:31

C++存储动态

2021-11-09 10:38:16

C++Const指针

2021-12-11 19:02:03

函数C++对象

2021-12-08 10:43:09

C++实现

2021-12-30 14:58:58

C++函数动态

2021-12-10 10:45:36

C++函数Stock

2021-10-26 00:19:51

C++结构体存储

2021-12-15 10:25:57

C++运算符重载

2022-01-04 16:35:42

C++Protected关键字

2021-12-05 18:20:42

C++空间特性

2021-10-26 15:36:17

C++枚举值类型

2021-10-27 16:27:20

C++指针操控

2021-11-10 10:48:36

C++函数指针

2021-12-26 00:08:35

C++初始化列表
点赞
收藏

51CTO技术栈公众号