生命周期如果和寄存器、内存什么的挂钩,就变得不那么好理解。、
其实生命周期的概念也很简单,无非就是变量从哪到哪有效。这里只说生民周期和大括号{ }的联系
浅显一点说,一个变量的生命周期就是从上一个 { 开始,到下一个 } 结束为止
[1]
看这么一个程序,就会对生命周期的概念更了解一点
问题——我们已经定义了b,为什么在括号外使用b的时候,会报错呢?
原因是——b的生命周期就是从 {//2 开始, }//3结束,然后b被回收,也就是b不存在了。(但是在VS中内存中的值还在,等待下一次分配)
[2]
这段程序给人的第一感觉是重定义!实际上却能够正常运行!
就像函数一样,在 { //2 到 } //3 之间,第二个a是有效的,即使同名。
需要注意的是,在内层的大括号中,由于两个a重名,所以无法访问外层的a。具体值的变化已经在程序中标出。
[3]
生命周期没结束的变量可以正常操作。参见注释
[4]回顾一下曾经使用过的生命周期相关知识:
1.for循环中定义变量,会在for循环结束后被回收。
2.函数中传递形参,会生成一个拷贝,函数结束后被回收;同时在函数中创建的变量也会被回收。
[5]知识补充
如果想要完整的理解生命周期的知识,可搜索以下关键词:
1.变量在内存中的存放--------》全局变量\局部变量\栈区\堆区\动态分配
2.如何告诉编译器这个变量已经存在?------》extern语句的使用
3.连接、外连接-------》编译过程
4.多个cpp以及带.h的编译-------》宏定义\#ifndef