#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; //ошибка
Комментариев нет:
Отправить комментарий