|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
|
Объявляется ли каждую итерацию переменная-счетчик в цикле for?20.11.2015, 09:09. Показов 8156. Ответов 56
Метки нет (Все метки)
Всем привет,
расскажу историю возникшего вопроса. Отходил я как-то на курсы с++, и там преподаватель (авторитетный вроде программист, много где работал, в Бауманке преподавал) сказал следующее, цитирую: "Очень часто я вижу, когда пишут вот такой вот лютый бред - for (int i = 0; i < n; i++){} - так никогда нельзя делать по причине того, что если цикл прокручивается например 1000 раз, то вы объявляете i 1000 раз, что не есть хорошо, а если цикл 1000000 раз прокрутится..? всегда пишите вот так - int i; for (i = 0; i < n; i++){}" Вобщем-то я впитал эту информацию как губка, и всегда пишу так, как он сказал... Друзья, прокомментируйте резонность его заявления, потому как, в виду того, что я НИКОГДА не вижу, чтобы объявление i выносили за цикл for, я начал сомневаться в этой информации, в конце концов ноль же не присваивается i каждый новый виток цикла, может этот кусок кода как-то игнорируется после первого прохода.., короче говоря, разложите пожалуйста по полкам.
0
|
|
| 20.11.2015, 09:09 | |
|
Ответы с готовыми решениями:
56
Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново?
|
|
Котовчанин
|
|
| 20.11.2015, 10:52 | |
Сообщение было отмечено Gloat как решение
Решение
Gloat, разница только в видимости переменной. Как бы, правильнее - делать видимость переменных как можно меньше, потому запись for (int i = 0; i < n; i++){} - самое оно.
Добавлено через 2 минуты Gloat, пример. Есть цикл, назову операции буквами, чтобы было проще. for (A; B; C) { } Тк вот. А - выполнится ДО начала всех итераций(один раз выполнилось и всё) В - перед каждой будет выполняться. С - после каждой.
1
|
|
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,246
|
||||||
| 20.11.2015, 10:54 | ||||||
|
Добавлю, аналог такого for через while
1
|
||||||
|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
|
| 20.11.2015, 10:55 [ТС] | |
|
Так, ну а что на счёт объявления 1000++ раз? Оно происходит или нет? потому как если не происходит, то дейстиветьльно, делать так как вы говорите "самое оно", просто не могу поверить что тот препод сказал левую информацию. Надо было его доколупать на этут тему.., ну знал просто совсем мало, поэтому принимал на веру всё...
0
|
|
|
|
|||
| 20.11.2015, 10:57 | |||
|
zss, ту можно и через goto написать, смысл от этого не изменится. Единственное, что можно сказать, - преподавателя в топку вместе с его "Бауманкой".
Добавлено через 37 секунд
1
|
|||
|
|
|||||||||||
| 20.11.2015, 10:58 | |||||||||||
|
Стало и мне интересно)
Решила попробовать) Плюс я помню как то писала программу в университете и с преподавателем долго думали, что не так цикл ходил не по той переменной,а потом нашли ошибку, как раз в var. Накидала код: Сначала такой:
Не по теме: Для гуру С++:так конечно не пишут, я про отсутствие инициализации в цикле.Но зато сразу видно различия в объявлении. Потом еще заглянула в пару книг и пришла к такому выводу: Первый случай переменная глобальная,и если ее изменить где то в теле программы, она может повлиять на работу цикла(у меня было такое, я пыталась получить ту ошибку, чтобы показать, но не получилось). Тут продолжается нумерация дальше.Т.е. после цикла переменная i=4 и в теле программы она дальше работает с этим значением. А второе переменная видна только в теле цикла, т.е. она локальная для цикла. И не будет использоваться вне цикла.
1
|
|||||||||||
|
|
|||
| 20.11.2015, 11:06 | |||
![]() Сейчас посмотрела в книгу Страуструпа и действительно глобальные только те что определены вне функций, классов и пространств имен. Добавлено через 1 минуту В сообщении я указала: Для гуру С++:так конечно не пишут, я про отсутствие инициализации в цикле.Но зато сразу видно различия в объявлении.
1
|
|||
|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
|
| 20.11.2015, 11:07 [ТС] | |
|
Юля_программист, во втором коде очепятка или для чего-то сделано int i = 0 до for'а и внутри? Как это называется... переопределение?
0
|
|
|
|
|||
| 20.11.2015, 11:12 | |||
|
В первом случае так сразу нагляднее было видно) Переменная не для цикла была,а для счета, чтобы увидеть как меняется i)
1
|
|||
|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
|
| 20.11.2015, 11:35 [ТС] | |
|
понял, понял, с определением разобрались, а что на счет объявления, может я говорю абсурдные вещи, но, было ли какое-то лишнее объявление мы проверить вот так кодом не можем(и вообще возможно ли такое?)?! Вообще как посмотреть механизм работы цикла for, а то написали в учебнике мол - это до цикла делается это после.., а реализовано это как, это надо смотреть ассемблерный код или.., или что?
0
|
|
|
Неэпический
|
||||||
| 20.11.2015, 11:37 | ||||||
![]() Как по мне, то лучше уж обратил бы внимание на то, что лучше писать ++i, чтобы по привычке потом с более сложными сущностями не написать i++. У нас вот вирусы по звукам их размножения искала, норм так, чё
3
|
||||||
|
Котовчанин
|
|
| 20.11.2015, 11:37 | |
|
Gloat, http://en.cppreference.com/w/cpp/language/for
Вряд ли нужно знать более глубоко, чем то, что описано здесь. Хотя я могу и ошибаться.
1
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||
| 20.11.2015, 11:41 | |||||||
2
|
|||||||
|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
||||||||
| 20.11.2015, 12:16 [ТС] | ||||||||
|
Croessmah,
![]() Добавлено через 18 минут rikimaru2013, попробовал код, да действительно, конструктор по умолчанию не вызывается ))) короче говоря, из всего что я прочитал, я понял что "авторитетный препод" сморозил (собственно, зачем я это всё и спрашивал), буду знать, спасибо.
0
|
||||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 20.11.2015, 12:21 | ||
|
Цикл for(A;B;C) D; разворачивается по сути в следующую последовательность А; while(B) {D; C;}. Как можно видеть, А выполняется только 1 раз.
2
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 20.11.2015, 12:35 | ||
i для цикла так вообще самое популярное имя де-факто.
0
|
||
|
Неэпический
|
|
| 20.11.2015, 12:40 | |
|
0
|
|
| 20.11.2015, 12:40 | |
|
Помогаю со студенческими работами здесь
20
Где объявляется Глобальная переменная в C++ ? Добавлять next() каждую итерацию цикла Пояснить, почему переменная объявляется как int
Visual Studio 2008 Release - версия приложения, не объявляется переменная Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|