EasyC++自动存储持续性
转自微信公众号:Coder梁(ID:Coder_LT)
自动存储持续性:
这个概念乍一看有些拗口,其实它很简单,指的是在函数定义中声明的变量的存储持续性是自动的:它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放。
在默认情况下,我们在函数中声明的变量和函数的参数都是自动存储持续性,它的作用于为局部,没有链接性。
这里的链接性描述了名称如何在不同的单元之间共享,链接性为外部的名称可以在文件之间共享,链接性为内部的名称只能由一个车文件中的函数共享。自动变量的名称没有链接性,也就是不能共享。
这段话是一段专业性描述,看不太明白没有关系。简单理解,就是说如果我们在main
函数当中声明了一个变量a,并且在函数test
当中也声明了一个同样的变量a。两者之间是完全独立的,彼此不会有任何影响,因为它们只有在声明了它的函数中才能使用。
当程序执行test
函数时,test
中的a才被创建,当test
执行结束,a即被销毁。
其实变量的作用域的最小划分并不是函数,而是代码块。我们在代码块当中创建的变量,它的使用范围作用域就只有当前代码块。例如:
int main() { int a = 4; { int b = 10; } }
我们在main函数当中定义了一个变量a和一个变量b,但是这两个变量定义的位置不同。b定义在了一个代码块(代码块使用花括号表示)当中,对于a来说,它的作用域是整个main
函数,而b只在花括号当中生效。
更有意思的是下面这段代码:
int main() { int a = 4; { int a = 5; cout << a << endl; } cout << a << endl; }
答案是输出的结果是5和4,为什么呢?
因为内部和外部都有一个变量a,当执行内部代码的时候,编译器隐藏了外部的定义。而程序离开代码块时,外部的定义又重新恢复。
到此这篇关于EasyC++自动存储持续性的文章就介绍到这了,更多相关 C++自动存储持续性内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
C++模板重载
目录 1.重载模板 2.问题 文章转自 公众号:Coder梁(ID:Coder_LT) 1.重载模板 函数模板可以使得同一个函数对不同类型使用,非常地方便.但有的时候类型不同,只是通过模板是没办法解决的, 可能逻辑上也会有所区别,这个时候只是使用模板是无法解决的. 为了满足这种需求,我们可以像是重载函数那样重载模板.和常规的函数一样,重载的模板的函数特征,也就是入参的数量和类型必须有所不同. 举个例子:比如我们之前定义了一个函数模板用来交换两个变量的值.如果我们要交换的不只是变量,而是两个数组
-
C++编写头文件
文章转自公众号:Coder梁(ID:Coder_LT) 我们之前做的左右示例都是在一个单独的cpp文件当中完成的,当我们要做一个相对复杂或大型的项目时,我们显然不能把所有代码都写在一个cpp里.这就需要我们拆分代码,但代码按照逻辑划分,写入不同的cpp文件当中. 在我们编译的时候,我们可以将这些cpp文件分别单独编译,最后再连接到一起.这样做的好处是,当我们只修改了某一个文件的时候,可以只用单独编译那一个文件,不会影响其他文件的编译结果.一般来说大型项目,都会使用一下自动化的编译工具,比如mak
-
C++模板显式具体化
出品 | 公众号:Coder梁(ID:Coder_LT) 前文当中说了,模板函数虽然非常好用,但是也存在一些问题.比如有的操作并不是对所有类型都适用的,针对这种情况C++提供了一个解决方案,就是针对特定类型提供具体化的模板定义.这里的具体可以理解成类型的具体. 我们来看一个C++ Primer当中的例子,假设现在我们有一个结构体叫做job: struct job { string name; double salary; int floor; } 对于结构体是可以整体赋值的,所以之前的Swap函
-
EasyC++单独编译
文章转自:微信公众号:Coder梁(ID:Coder_LT) 联合编译: 在上一篇当中,我们编写好了头文件coordin.h,现在我们要完成它的实现 头文件当中只能放一些生命和常量的定义,不能有具体的实现.所以我们要把具体的实现单独放入一个cpp文件当中.因为我们的头文件叫做coordin.h,那么我们与之对应的cpp文件自然就叫做coordin.cpp. 在coordin.h当中我们声明了两个函数,自然我们就要完成这两个函数的实现: #include <cstdio> #include &l
-
C++ 右值引用
目录 1.左值和右值 2.左值引用和右值引用 文章转自:公众号:Coder梁(ID:Coder_LT) 1.左值和右值 在我们之前的文章当中,介绍的都是左值引用.C++11在左值引用的基础上推出了右值引用,由于是新特性,加上使用的频率也不是很高,有一定的学习成本. 我们先把引用这个概念抛开,先来看看什么是左值什么是右值.其实很简单,左值可以取地址,位于等于号的左侧.而右值没办法取地址,位于等于号的右侧. int a = 4; 比如我们定义了一个int型的变量a,让它的值等于4.其中a位于等于号的
-
详解C++中的自动存储
C++有3种管理数据内存的方式即自动存储(栈存储).静态存储和动态存储(堆存储).在不同的方式下,内存的分配形式和存在时间的长短都不同. 下面对自动存储进行说明. 自动存储(栈存储) 对于函数的形参.内部声明的变量及结构变量等,编译器将在函数执行时为形参自动分配存储空间,在执行到变量和结构变量等的声明语句时为其自动分配存储空间,因此称其为自动变量(Automatic Variable),有的教科书也称其为局部变量,在函数执行完毕返回时,这些变量将被撤销,对应的内存空间将被释放. 事实上,自动变量
-
C++函数模板介绍
文章转自: 公众号:Coder梁(ID:Coder_LT) 函数模板: 所谓函数的模板,本质上也就是使用泛型来定义函数. 所谓的泛型其实也就是不定的类型,比如说我们使用vector的时候,可以定义各种类型的vector,可以定义存储int型的vector也可以定义存储float类型的,也可以定义存储其他类型.我们在声明的时候将存储的类型当做参数传给了模板. 泛型可以用具体的类型,比如(int或double)替换,通过将类型作为参数传给模板,编译器会根据传递的参数类型生成该类型的函数.这种方式也被
-
EasyC++自动存储持续性
转自微信公众号:Coder梁(ID:Coder_LT) 自动存储持续性: 这个概念乍一看有些拗口,其实它很简单,指的是在函数定义中声明的变量的存储持续性是自动的:它们在程序开始执行其所属的函数或代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放. 在默认情况下,我们在函数中声明的变量和函数的参数都是自动存储持续性,它的作用于为局部,没有链接性. 这里的链接性描述了名称如何在不同的单元之间共享,链接性为外部的名称可以在文件之间共享,链接性为内部的名称只能由一个车文件中的函数共享.自动变量
-
AutoSave/自动存储功能实现
转自: http://www.fayland.org/journal/AutoSave.html 这个功能很常见.是为了防止浏览器崩溃或提交不成功而导致自己辛辛苦苦写就的东西消失掉.Gmail 里也这个东西.它的原理是将该文本框的东西存储进一个 Cookie. 如果没提交成功(原因可能是浏览器崩溃),下次访问该页面时询问是否导入上次存储的东西.function AutoSave(it) { // it 指调用的文本框 var _value = it.value; // 获得文本框的值
-
C++存储链接性原理详解
目录 链接性 外部链接性 单定义规则 内部链接性 无链接性 总结 链接性 链接性是指名称在不同文件之间能否共享,而作用域是指名称在文件内部哪些范围可见. 这里的文件并非开发时创建的文件,而是将文件的 include 内容全部递归包含进来之后,形成的大文件. 这一点也是与Go等一些语言不同.在Go语言中,文件是按包(package)组织,所有依赖的包都需要直接或间接import进来.也就是从main开始递归import得到的就是我们依赖的所有文件. 但C++不同.C++源文件主要分.h 和 .cp
-
《C++ primer plus》读书笔记(三)
第九章 1.C++程序的组成-- (1).头文件: 包含结构声明和使用这些结构的原型. (2).源代码文件: 包含与结构有关的函数的代码. (3).源代码文件: 包含调用与结构有关的函数的代码. 2.头文件-- (1).常包含的内容: 函数原型:#define或const定义的符号常量:结构声明:类声明:模板声明:内联函数. (2).若文件名包含在尖括号中,编译器将在存储标准头文件的主机系统的文件系统中查找. (3).若文件名包含在双引号中,编译器首先查找当前的工作目录或源代码目录,再在标准位
-
C++内存模型和名称空间详解
目录 1. 单独编译 2.存储持续性.作用域和链接性 2.1 作用域和链接 2.2 自动存储持续性 2.3 静态持续变量 2.4 静态持续性.外部链接性 2.5 静态持续性.内部链接性 2.6 静态存储持续性.无链接性 2.7 说明符和限定符 2.8 函数和链接性 2.9 语言链接性 2.10 存储方案和动态分配 3. 名称空间 3.1 传统的C++名称空间 3.2 新的名称空间特性 3.3 名称空间及其前途 4 .总结 本章内容包括: 单独编译 存储持续性.作用域和链接性 定位new运算符 名
-
EasyC++静态持续变量
目录 1.auto关键字 2.静态持续变量 文章转自微信公众号:Coder梁(ID:Coder_LT) 1.auto关键字 我们现在知道,使用auto关键字可以自动推导变量类型,尤其是在一些很复杂的情况下,使用auto可以大大简化代码.但是在早期的C++和C语言当中,auto关键字被用来显式地表示某个变量为自动存储. auto float dis; 这个功能几乎不被使用,所以在C++11当中进行了更新,赋予了它新的含义. 2.静态持续变量 除了自动存储变量之后,C++当中还有静态持续变量.关于静
-
EasyC++全局变量
文章转自公众号:Coder梁(ID:Coder_LT) 全局变量: 前面聊到了静态持续变量的链接性,其中链接性为外部的变量通常简称为外部变量.它们的存储持续性为静态,作用域为整个程序.外部变量是在函数外部定义的,因此对于所有的函数而言都是外部的.因此外部变量也被称为全局变量. 关于外部变量,C++当中有一个单定义规则:变量只能有一次定义. 这句话看起来有些难以理解,为了理解它,我们需要厘清C++当中的两种变量声明.一种是定义声明简称为定义,它给变量分配存储空间.另外一种是引用声明,简称为声明,它
-
深入理解C++中变量的存储类别和属性
C++变量的存储类别(动态存储.静态存储.自动变量.寄存器变量.外部变量) 动态存储方式与静态存储方式 我们已经了解了变量的作用域.作用域是从空间的角度来分析的,分为全局变量和局部变量. 变量还有另一种属性--存储期(storage duration,也称生命期).存储期是指变量在内存中的存在期间.这是从变量值存在的时间角度来分析的.存储期可以分为静态存储期(static storage duration)和动态存储期(dynamic storage duration).这是由变量的静态存储方式
-
解析C++中的5个存储类的作用
存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期.这些说明符放置在它们所修饰的类型之前.下面列出 C++ 程序中可用的存储类: auto register static extern mutable 存储类说明符可以分为两个存储类:自动存储类(autmatic storage class)和静态存储类(static storage class).关键字auto和regtster用来声明自动存储类变量.这种变量在进入声明的块时生成,在块活动期间存在,在退出这个块时删除. 只有变量能作
随机推荐
- C++ 头文件系列(set)详解
- Python抓取Discuz!用户名脚本代码
- JS来动态的修改url实现对url的增删查改
- ASP.NET缓存 方法分析和实践示例
- C#实现自定义Dictionary类实例
- 在ASP.NET中支持断点续传下载大文件(ZT)源码
- Android UI之ImageView实现图片旋转和缩放
- 一个可分页的基于文本的PHP留言板源码第1/2页
- 分享一个C#编写简单的聊天程序(详细介绍)
- JavaScript中的事件委托及好处
- 浅析Android 的 MediaPlayer类
- 基于jquery实现图片广告轮换效果代码
- Java实现的基于socket通信的实例代码
- java中instanceof和getClass()的区别分析
- 解析StreamReader与文件乱码问题的解决方法
- FileShare枚举的使用小结(文件读写锁)
- PHP中的str_repeat函数在JavaScript中的实现
- php feof用来识别文件末尾字符的方法
- python opencv 直方图反向投影的方法
- Redis如何在项目中合理使用经验分享