Страницы

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

среда, 5 февраля 2020 г.

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

#cpp


Всем привет! Вот,собственно вопрос про С++: объявил в первом цикле for переменную
инт, а во втором цикле IDE ее не видит и выдает ошибку, мол она не объявлена? Наводит
на мысль, что это не баг, а фича. Так и должно быть? Объявленная в цикле переменная
видна только для этого цикла?

    


Ответы

Ответ 1



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

Ответ 2



Переменные в С++ видны в пределах того блока, в котором они объявлены. В вашем случае i объявлена в блоке for, и следовательно, видна только в нем. Второй блок for пытается присвоить i значение 0, когда переменной i уже нету. В каждом блоке заново объявляйте переменную. for (int i = 0; i < 7;++i) //здесь i есть ++i; //А здесь нету i = 0; //ошибка

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

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