1.作用域表示某个标识符在什么范围有效;
函数原型中的参数,其作用域始于“(“,结束于”)”.
例如,设有下列原型声明:
double Area(double radius);radius的作用域仅在于此,不能用于程序正文其它地方。
**块作用域:**在块中声明的标识符,其作用域自声明处起,限于块中,例如:
void fun (int a)
{
int b(a);
cin>>b;
if(b>0)
{
int c;
......
}
}
**类和文件作用域:**
类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则.
不在前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件尾.
**2.可见性指的是标识符是否可见,可引用.**
如果标识在某处可见,则可以在该处引用此标识符.
标识符应声明在先,引用在后.
在同一作用域中,不能声明同名的标识符.
如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见.
对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见.
#include <iostream.h>
int i;//文件作用域
{
i=5;
{
inti;//块作用域
i=7;
cout<<"i"<<i<<endl;//输出7
}
cout<"i="<<i;//输出5
return 0;
}
**3.对象的生存期:**对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止。
**静态生存期:**
这种生存期与程序的运行期相同.
在文件作用域中声明的对象具有这种生存期.
在函数内部声明静态生存期对象,要冠以关键字static
#include<iostream.h>
int i=5;//文件作用域
int main()
{
cout<<"i="<<i<<endl;//i具有静态生存期
return 0;
}
动态生存期:
块作用域中声明的对象是动态生存期的对象(习惯称局部生存期对象)
开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。
#include <iostream.h>
void fun();
void main()
{
fun();
fun();
}
void fun ()
{
static int a=1;
int i=5;
a++;
i++;
cout<"i="<<i<<",a="<<a<<endl;
}
}