学了这么久的C++,也没有总结过自己到底学会了什么,希望在今后的学习中,把自己学习的记录下来。
首先,我们学习的每一门语言,都需要容器来存储一些事物,容器或者大,或者小,单总是用来装东西的,今天我们从最小的开始。——变量
变量,在我们的学习中,无处不在,其生存期也给我们带了了很多的困扰,不知道在哪里用,用过之后,其最后的值到底是多少,在使用的时候,命名一样的话,到底我们现在用的是哪一个。
的确很烦人,
变量的存储适合内存分不开的,那么我们就结合内存模型来解析一下我们的变量。
我们常见的变量,在头文件中有、在我们的类声明中有、在我们函数传递的参数中有、在我们的函数中定义的,在代码块中定义的。那他们的作用范围是什么呢?是什么时候创建,什么时候死掉的呢?
我们来总结一下。(说一下我的理解。)
生存期,说明变量的生存状况,就是我们书中说的什么生存持续性。表达其生存的持久时间。(自动存储持续性,静态存储持续性,动态存储持续性,线程存储持续性)。
作用域,表达变量在程序中的作用范围,即什么时候创建(开始存在),到什么时间销毁(死掉了)。
链接性,表达变量是否可跨文件起到作用。即文件间是否可以共享。
这里我们理解了一些基本的概念。就可以开始了,我们从小到大的来说一说变量。
①自动存储持续性,作为局部变量,只供自己使用,就没有链接了
这种类型的变量,有我们上面讲的:函数传递的参数,函数中定义的变量,代码块中定义的变量。
函数传递的参数:
作用域: 开始存在:在我们声明的位置。程序执行所属的代码时,分配内存。
销毁:在函数执行完成的时候。
※:隐藏外面定义的同名变量。
函数中定义的变量:
作用域: 开始存在:执行到我们函数中定义的位置,开始分配内存,
销毁:在函数执行完成。
※:隐藏外面定义的同名变量。
代码块中定义的变量:
作用域: 开始存在:执行到我们的代码块时,分配内存,
销毁,代码块执行结束
※:隐藏外面定义的同名变量。
小结:当我们执行到函数,或代码块的时候,里面的变量隐藏了外部我们定义的同名变量,那么,执行之后呢,我们外部的变量是否改变了呢?
没有改变,打我们执行完我们的函数,代码块之后,我们在里面定义的变量销毁了,跳出来之后,我们外部定义的变量有重新起到了他的
作用。对向下执行的代码,再次可见,可以使用。销毁的变量不复存在,现在变量的值仍旧是他本来的值
②:静态持续变量
静态持续变量,有三种链接性:外部链接性,内部链接性,无链接性。
特点:寿命比较长。
链接性是与文件相关的,那么就不能再函数内部,类的内部,代码块的内部定义我们的变量了。
静态持续性,外链接:必须在代码块的外面声明它;
静态持续性,内连接:必须在代码块的外面声明它,并使用static限定符;
静态持续性,无链接:必须在代码块的内部声明它,并使用static限定符。
生存周期:所有的静态持续变量,在整个程序执行期间都存在。
(static的两种用法:其一:用于局部声明,以指出变量是无链接性的静态变量,static表示的是存储持续性。其二:用于代码块外面的声明,static表示内部链接性,而变量已经是静态持续性了。)
1)静态持续性外链接:即链接性为外部的变量,在整个文件起作用。还可以在其他的文件中使用》》》》单必须声明它。符合单定义规则。通常在头文件中定义
C++中的两种声明方式,一种是定义声明或简称定义(它给变量分配储存空间),一种是引用声明(不分配储存空间,引用已有变量,必须使用extern关键字)。
2)静态持续内连接:与静态持续内连接相似,不过在其定义的前面,添加一个static。使其成为内连接。只能在其所属的文件中使用。
3)静态持续无链接:将static限定符用于在代码块中定义的变量中,就使这个变量成为了静态持续无链接的变量。
变量大概个离这样分吧,看了C++ primary 感觉这样分挺好。自己总结了一下,仅供参考。