Философия программирования на C++ Выпуск 18. Локальность
Добрый день, уважаемые читатели!
Сегодня мы поговорим про область видимости переменных. Это по сути тема о том, когда одно и то же имя переменной можно использовать много раз (если совсем грубо говоря).
Сразу программка (да-да, опять программа ни о чем - что ж поделать, если нужно что-то понять, приходится писать такие вот ничего не делающие программы).
Сначала все идет как обычно, мы просто вводим число в переменную а. Дальше открываем блок - и выводим ее содержимое. Ничего необычного. Но потом мы создаем переменную с тем же именем внутри этого блока. Так вот, у каждого блока могут быть свои "локальные" переменные с любыми именами (но нельзя создать две переменные с одинаковым именем в одном блоке). Но как видно из примера, внутренние блоки видят переменные внешнего блока
(как мы вывели переменную а, после чего создали еще одну с тем же именем) - но не наоборот.
Вообще говоря все это естественно, внутренние видят что происходит снаружи, но могут заменить собственным. Но вот переменная а начинает существовать только с момента ее объявления (когда мы указали ее тип и имя) - поэтому до строчки int a = 10; используется "внешняя" переменная а.
Думаю, запустив эту программу, вы все поймете. Это не сложно.
Далее. Тело любого условия или цикла является отдельным
внутренним блоком. Поэтому внутри условия или блока мы можем использовать внешние переменные - а вот снаружи использовать их локальные переменные нельзя. Более того. В цикле for переменная, объявляемая в блоке инициализации - тоже является локальной - и не видна вне цикла. Пример: сложим числа от 1 до 10.
#include<iostream>
usingnamespacestd;
intmain(){
intsum=0;
for(inti=1;i<11;i++){
sum+=i;
}
cout<<"sum:"<<sum<<endl;
//!cout<<"i:"<<i<<endl;
}
Вы можете раскомментировать последнюю строчку и убедиться, что компилятор выдаст ошибку (кстати в следующем выпуске мы подробнее рассмотрим работу компилятора).
Как видите, цикл тоже отделяется теми же фигурными скобками. И внутри мы используем внешнюю переменную sum.
Надеюсь, с этим проблема дальше не будет. Ждите следующий выпуск - мы расскажем вам, как понимать что сообщает вам компилятор!