Страницы

Поиск по вопросам

вторник, 9 апреля 2019 г.

Объявленная переменная умерла?

Всем привет! Вот,собственно вопрос про С++: объявил в первом цикле 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 переменная прекращает свое существование, и соответствующее имя становится необъявленным.

Комментариев нет:

Отправить комментарий