К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

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