в операторе цикла ограничено блоком
for (int i = 0; i < 10; i++) { int i = 0; i += i; }
Пространство имени переменной в операторе цикла ограничено блоком из двух операторов. В этом пространстве переменная, объявленная в заголовке, оказывается скрытой одноимённой переменной.
Десять раз переменная i из оператора-инициализатора цикла будет заслоняться одноимённой переменной из оператора тела цикла. И всякий раз к нулю будет прибавляться нуль.
Ещё один пример. Два расположенных друг за другом оператора цикла for содержат ошибку
for (int i = 0, int j = 0; i < 100; i++, j--) { // Операторы первого цикла. } for (int i = 0, int k = 250; i < 100; i++, k--) { // Операторы второго цикла. }
Всё дело в том, что, согласно правилу соотнесения имён и областей действия имён в операторе цикла for, объявления переменных в заголовке цикла оказываются в общем пространстве имён. А почему, собственно, не приписать переменные, объявленные в заголовке цикла блоку, составляющему тело цикла? У каждого из альтернативных вариантов соотнесения имеются свои достоинства и недостатки. Однако выбор сделан, что неизбежно ведёт к конфликту имён и воспринимается как попытка переобъявления ранее объявленной переменной.
Эту самую пару операторов for можно переписать, например, следующим образом:
for (int i = 0, int j = 0; i < 100; i++, j--) { // Здесь располагаются операторы первого цикла. } for (i = 0, int k = 250; i < 100; i++, k--) { // Здесь располагаются операторы второго цикла. }
Здесь нет ошибок, но при чтении программы может потребоваться дополнительное время для того, чтобы понять, откуда берётся имя для выражения присвоения i = 0 во втором операторе цикла. Кроме того, если предположить, что операторы цикла в данном контексте реализуют независимые шаги какого-либо алгоритма, то почему попытка перемены мест пары абсолютно независимых операторов сопровождается сообщением об ошибке:
for (i = 0, int k = 250; i < 100; i++, k--) { // Здесь располагаются операторы второго цикла. } for (int i = 0, int j = 0; i < 100; i++, j--) { // Здесь располагаются операторы первого цикла. }
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий