Всем привет! Вот,собственно вопрос про С++: объявил в первом цикле for переменную инт, а во втором цикле IDE ее не видит и выдает ошибку, мол она не объявлена? Наводит на мысль, что это не баг, а фича. Так и должно быть? Объявленная в цикле переменная видна только для этого цикла?
Ответ
Согласно описанию for-предложения в стандарте C++ (6.5.3 The for statement)
1 The for statement
for ( for-init-statement conditionopt; expressionopt) statement
is equivalent to
{
for-init-statement
while ( condition )
{
statement expression ;
}
}
except that names declared in the for-init-statement are in the same
declarative region as those declared in the condition, and except that
a continue in statement (not enclosed in another iteration statement)
will execute expression before re-evaluating condition. [Note: Thus
the first statement specifies initialization for the loop; the condition
(6.4) specifies a test, made before each iteration, such that the loop
is exited when the condition becomes false; the expression often
specifies incrementing that is done after each iteration. —end note]
Поэтому ваше предложение for можно представить, как это описано в стандарте
{ // блок кода, в котором объявлена переменная i
int i = 0;
{
while ( i < 10; )
{
massiv[i] = i;
i++;
}
}
}
// здесь уже нет доступа к переменной `i` в виду прекращения ее существования.
После выхода из предложения for переменная прекращает свое существование, и соответствующее имя становится необъявленным.
Комментариев нет:
Отправить комментарий