目录
一、标识符的作用域与可见性
1.1作用域
作用域是一个标识符在程序正文中有效的区域
分类
1、函数原形作用域
函数原型中的参数,其作用域始于 " ( ",止于" ) ",限与小括号内
2、局部作用域(块作用域)
函数的形参、在块中声明的标识符的作用域;自声明处起,限于块中
void fun(int a) { //a的范围在整个函数
int b = a; //b的范围仅限fun函数体
cin >> b;
if (b > 0) {
int c; //c的范围仅限if语句
......
}
}
3、类作用域
类的成员具有类作用域,其范围包括类体和非内联成员函数的函数体
如果在类作用域以外访问类的成员,要通过类名(访问静态成员),或者该类的对象名、对象引用、对象指针(访问非静态成员)
4、文件作用域
不在前述各个作用域中出现的声明的标识符,就具有文件作用域,始于声明处,止于文件尾
5、命名空间作用域
1.2可见性
可见性是从对标识符的引用的角度来谈的概念,表示从内层作用域向外层作用域“看”时能看见什么
- 如果标识在某处可见,就可以在该处引用此标识符
- 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见
- 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见(被屏蔽)
#include<iostream>
using namespace std;
int i; //全局变量,文件作用域
int main() {
i = 5; //为全局变量i赋值
{
int i; //局部变量,局部作用域
i = 7;
cout << "i = " << i << endl; //输出7
}
cout << "i = " << i << endl; //输出5
return 0;
}
结果:
i = 7
i = 5
二、对象的生存期
2.1静态生存期
与程序的运行期相同
在文件作用域中声明的对象具有这种生存期
在函数内部声明静态生存期对象,要冠以关键字static
2.2动态生存期
始于声明处,止于命名该标识符的作用域结束处
块作用域中声明的,没有用 static 修饰的对象是动态生存期的对象(习惯称局部生存期对象)