作用域与生命周期

来源:互联网 发布: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
原创粉丝点击