Тривиальный вопрос о переопределении - PullRequest
1 голос
/ 26 апреля 2010

Почему это не разрешено:

int a = 0;
int a = 0;

но это:

for (int i = 0; i < 2; ++i)
{
    int a = 0;
}

Насколько я знаю, код внутри цикла будет выполняться дважды, фактически не выходя за его рамки, поэтому также следует определить ошибку дважды. Ждем ваших ответов
Спасибо.

Ответы [ 3 ]

8 голосов
/ 26 апреля 2010

В цикле for есть одно определение. Переменная создается, используется, затем уничтожается в закрывающей фигурной скобке и воссоздается в следующей итерации цикла. Определена одна переменная.

Это похоже на переменную, определенную в функции. Функцию можно вызывать много раз, но переменная равна единице. Фактически, с функциями функцию можно вызывать рекурсивно, и будет работать более одной переменной, но для каждого выполнения функции определена одна переменная.

РЕДАКТИРОВАТЬ: Обратите внимание, как правильно указывает @xtofl, время жизни i - это весь цикл for, а время жизни a - это блок в фигурных скобках: одна итерация цикла for.

3 голосов
/ 26 апреля 2010

Код выполняется дважды.
Но компилятор прочитает определение переменной 'a' только один раз.

2 голосов
/ 26 апреля 2010

Во втором случае переменная a находится только в цикле for. Вы не можете получить к нему доступ извне. И он будет создан для каждой итерации вашего цикла снова - как будто вы получаете новый a для каждой итерации. Например, невозможно присвоить значение a в одном взаимодействии и получить доступ к этому назначенному значению в любой последующей итерации.

Вы должны прочитать о переменных областях , чтобы получить больше информации по этой теме. так как это действительно важно в программировании.

...