在C++中变量有以下两种生命周期:
(1)变量由编译程序在编译时给其分配存储空间(称为静态存储分配),并在程序执行过程中始终存在。。这类变量的生存周期与程序的运行周期相同,当程序运行时,该变量的生存周期随即存在,程序运行结束,变量的生存周期随即终止。
(2)变量由程序在运行时自动给其分配存储空间(称为自动存储分配),这类变量为函数(或块)中定义的自动变量。它们在程序执行到该函数(或块)时被创建,在函数(或块)执行结束时释放所占用的空间。
例 变量作用域示例
#include<iostream>
using namespace std;
int i = 0;
int main()
{
int i = 1;
cout << i << endl;
{
int i = 2;
cout << i << endl;
{
i += 1;
cout << i << endl;
}
cout << i << endl;
}
cout << i << endl;
return 0;
}
从上面例子可以看出,由于作用域的屏蔽效应,如果函数中又同名变量,则不能访问外部变量。为了能在函数内部访问函数外定义的变量,可以使用C++作用域运算符::。通过作用域运算符,即使该函数(块)中已经有与之同名的变量,也可以在函数(块)中使用定义在函数外的全局变量。例如:在上面main函数中可以通过::i来访问外部变量i。
当程序较大时,利用名字屏蔽机制是非常必要的。但是这也会导致程序可读性变差,好的程序设计风格应尽量避免名字屏蔽。
参考《全国计算机等级考试二级教程——C++语言程序设计》