自动变量、静态变量与链接性、存储持续性的关系

链接性:(链接性描述了名称如何在不同单元共享,也描述了名称的作用域)

		链接性分为外部、内部、无链接性
		外部链接性:可以在不同文件间共享
		内部链接性:可以在整个文件间共享
		无连接性:不能共享,只能在局部代码块使用

存储持续性:(持续性描述了变量的生存周期)

		1、自动存储持续性:
				在函数中定义的变量存储持续性为自动,在程序
				开始调用其所属函数开始被创建,调用完毕被销毁,
				在C++中有2种变量存储持续性为自动。
		2、静态存储持续性:
				在函数定义外定义的变量和使用用关键字static定义的
				变量存储持续性为静态。它们在整个程序运行过程中
				都一直存在C++中有3种存储持续性为静态的变量;
		3、线程存储持续性(C++11):如果是用关键字
				thread_local声明的变量,其生命周期与所属线程
				一样长。
		4、动态存储持续性:用new运算符分配空间后一直存在
				直到调用delete函数之后被销毁。

存储持续性与链接性的关系

存储描述持续性链接性作用域声明方式
自动自动代码块在代码块中或者函数参数
寄存器自动代码块在代码块中用关键字register
静态无链接性静态代码块在代码块中用关键字static
静态外链连静态外链接外部在函数外
静态内链接静态内链接内部在函数外部用static

注:
[1] register在C++11标注以前是用来声明寄存器变量的,用
register声明的变量会被存储在CPU寄存器内,加快访问速度,
对于某些访问量高的变量来说很适合。但是在C++11标准以后
register知识用来显示的指出变量是自动的,现在的编译器已经能
对使用频繁的变量做特殊处理了。

[2] auto,在C++11标注以前,auto关键字是用来显示的指出
某个变量为自动变量,和现在的现在的register和以前的auto
作用是一样的。但是在C++11标准以后auto被用来自动判断
变量的类型。

[3] static,在代码块中使用static关键字声明的变量存储持续性
为静态。在函数外用static关键字声明的变量链接性为内部。

[4] extern,想要在本文件中使用另一个文件中链接性为外部的变量
必须在本文件中使用关键字extern声明。

单定义规则:
该规则指出,变量只能定义一次,为了满足这种需求,C++
提供了两种变量的声明方式。一种是定义声明,简称为定义,
例如:int a,他会给变量分配内存空间。另一种是引用声明
,简称声明,例如:extern int a,它不会给变量分配内存空间
,只是告诉编译器有这么一个变量,且这是一个外部变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值