|
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
|
|
Объявляется ли каждую итерацию переменная-счетчик в цикле for?20.11.2015, 09:09. Показов 7885. Ответов 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
|
|
|
Модератор
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
|
||||||
| 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 - версия приложения, не объявляется переменная Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|