|
|
||
2. Область видимости и продолжительность жизни |
||
Прежде всего нам нужно сначала разобраться с двумя терминами: область видимости и продолжительность жизни. Область видимости определяет, где можно использовать переменную. Продолжительность жизни (или «время жизни») определяет, где переменная создается и где уничтожается. Эти две концепции связаны между собой. Переменные, определенные внутри блока, называются локальными переменными. Локальные переменные имеют автоматическую продолжительность жизни: они создаются (и инициализируются, если необходимо) в точке определения и уничтожаются при выходе из блока. Локальные переменные имеют локальную область видимости (или «блочную»), т.е. они входят в область видимости с точки объявления и выходят в самом конце блока, в котором определены. Например, рассмотрим следующую программу: #include <iostream>
int main()
{
int x(4); // переменная x создается и инициализируется здесь
double y(5.0); // переменная y создается и инициализируется здесь
return 0;
} // x и y выходят из области видимости и уничтожаются здесь
Поскольку переменные x и y определены внутри блока, который является главной функцией, то они обе уничтожаются, когда main() завершает свое выполнение. Переменные, определенные внутри вложенных блоков, уничтожаются, как только заканчивается вложенный блок: #include <iostream>
int main() // внешний блок
{
int m(4); // переменная m создается и инициализируется здесь
{ // начало вложенного блока
double k(5.0); // переменная k создается и инициализируется здесь
} // k выходит из области видимости и уничтожается здесь
// Переменная k не может быть использована здесь, так как она уже уничтожена!
return 0;
} // переменная m выходит из области видимости и уничтожается здесь
|
||
Такие переменные можно использовать только внутри блоков, в которых они определены. Поскольку каждая функция имеет свой собственный блок, то переменные из одной функции никак не соприкасаются и не влияют на переменные из другой функции: #include <iostream>
void someFunction()
{
int value(5); // value определяется здесь
// value можно использовать здесь
} // value выходит из области видимости и уничтожается здесь
int main()
{
// value нельзя использовать внутри этой функции
someFunction();
// value здесь также нельзя использовать
return 0;
}
|
||
|
||
2 |