Внутри функций код может породить много областей видимости. Каждая пара {} порождает свою область видимости. Давайте посмотрим на код.
#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() { { { } { { } } } }
Так, что внутри функций с областями видимости и определением переменных надо быть внимательными. Вы как можете изменить более глобальную переменную, так и потерять данные.