作用域与生命周期
来源:互联网 发布:linux vi 复制多行 编辑:程序博客网 时间:2024/04/29 06:12
作用域与生命周期是描述了常量,变量,函数的等对象的使用范围,当程序代码中这些对象一旦超过了这个范围,那么将出现编译错误。下面我们来研究一下它;
局部作用域描述的是函数体中变量和函数的适用范围,每一个函数都有自己的局部作用域。在函数体中定义的变量,函数对于外部函数是不可见的看,因为他们在函数的局部作用域中,对函数复合语句定义的对象在语句外也是不可使用的,因为它也有自己的作用域;局部变量的生命期短,全局变量的生命期长;因为局部变量在定义后的生命在面对第一个大括号就结束了,而全局变量的生命周期将在main函数结束时才结束。
例如:
由上可以看到由于a在局部作用域中定义的在这个作用域外的就不可以使用,所以出现了编译错误。
而如果是:在main这个作用域中定义一个相同的变量名时。
#include<iostream>using namespace std;int main(){ { int a=10; } cout<<a<<endl;}
同样在main函数中定义的变量在其他范围内也不行,如果使用了全局变量那么变量的作用域将覆盖整个函数
例如:
#include<iostream>using namespace std;//int a=30;void show();int main(){int a=20; printf("局部作用域\n");{int a=10;cout<<a<<endl;}printf("main作用域中\n");cout<<a<<endl;show();return 0; } void show(){cout<<"全局"<<endl;cout<<a<<endl;}
如果将注释的解除,那么这个程序就可以运行了;
那么,接下来我们在看一个代码:
#include<iostream>using namespace std;int main(){int a=5;{cout<<a<<endl;int a=10;cout<<a<<endl;}cout<<a<<endl;return 0;}
大家可以看看这个代码的结果是,
5
10
5
这就是另外一个问题了,当在所在的定义域内找不到输出的定义,那么函数将向该定义域上层的定义域中寻找;同样,我们也可以看到作用域的长短了,在单独的作用域定义的变量,在作用域外无法使用了。
1 0
- 作用域与生命周期
- Java对象的生命周期与作用域
- 变量的生命周期与作用域
- C++中的作用域与生命周期
- C++ 作用域与生命周期 静态static
- Spring - bean的作用域与生命周期
- (三)生命周期与作用域
- 变量的作用域与生命周期
- 作用域生命周期
- 作用域和生命周期
- 作用域和生命周期
- Java对象的生命周期与作用域的讨论
- C++中变量的作用域与生命周期
- C++中变量的作用域与生命周期
- Java对象的生命周期与作用域的讨论
- C++中变量的作用域与生命周期
- C++中变量的作用域与生命周期
- C++中变量的作用域与生命周期
- 搞搞hibernate.current_session_context_class
- PAT (Advanced Level) Practise 1104 Sum of Number Segments (20)
- 快速排序
- 公司间采购的后台配置备忘录
- DB2SQL递归写法
- 作用域与生命周期
- 百度面试经验和总结
- 质数因子
- 常见问题转载链接
- podspec转podspec.json
- Android studio 2.1 集成第三方短信验证类库
- 机器学习-神经网络-手写字体识别
- 代理模式
- 基于图的推荐算法——《推荐系统实践》