|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
|
Объявляется ли каждую итерацию переменная-счетчик в цикле for?20.11.2015, 09:09. Показов 8239. Ответов 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
|
|
|
Модератор
13778 / 10971 / 6491
Регистрация: 18.12.2011
Сообщений: 29,258
|
||||||
| 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 - версия приложения, не объявляется переменная Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
|