Внутри функций код может породить много областей видимости. Каждая пара {} порождает свою область видимости. Давайте посмотрим на код.
#include "stdafx.h"
#include "iostream.h"
void print();
void main(int argc, char* argv[])
{
print();
}
void print()
{
int i=5;
cout << i << endl;
{
int i=6;
cout << i << endl;
}
cout << i << endl;
}
Как Вы думаете, что появится в результате работы этой программы ???
5 6 5
То есть объявление переменной внутри {} c тем же именем и манипуляции с ней не повлияли на переменную более глобального уровня. Кстати {} могут появиться просто так в следствии вашей доброй воли, Фигурные скобки являются обязательными в операторах типа
for
while
swith
и т.д.
И Опять если локальную переменную не объявить, то будет использована переменная из более глобальной области. В этом примере выведутся одни пятерки.
void print()
{
int i=5;
cout << i << endl;
{
cout << i << endl;
}
cout << i << endl;
}
Самое главное отличие в том, что внутри функций количество вложений блоков не ограничено и как следствия областей определения - реализации. Вот так например :-)
void print()
{
{
{
}
{
{
}
}
}
}
Так, что внутри функций с областями видимости и определением переменных надо быть внимательными. Вы как можете изменить более глобальную переменную, так и потерять данные.