|
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
|
|||||||||||
Разница между префиксной и постфиксной формой записи счетчика цикла26.04.2010, 17:56. Показов 32934. Ответов 57
Метки нет (Все метки)
Здравствуйте!
Когда оформлял циклы всегда использовал такую запись:
В последнее время стал встречать другую запись:
Когда какой более предпочтителен?
0
|
|||||||||||
| 26.04.2010, 17:56 | |
|
Ответы с готовыми решениями:
57
Перегрузка постфиксной и префиксной операции инкремента Перегрузка постфиксной и префиксной формы оператора ++ Отличие постфиксной и префиксной формы декрементирования при работе с массивами |
|
9 / 9 / 0
Регистрация: 22.01.2012
Сообщений: 59
|
|
| 12.08.2014, 14:04 | |
|
taras atavin, kazak, не совсем так. Для базовых типов оптимизатор (если он, конечно, у вас включен) i++ преобразует в ++i, где это возможно. Однако, для итераторов это не верно, так что есть люди, которые всегда используют ++i для сохранения целостности кода. Однако мне кажется, что i++ все-таки выглядит приятнее.
немного я опоздал с ответом) по поводу скорости работы: i++ в простейшем виде: tmp = i; ++i; return tmp;
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 17.08.2014, 06:57 | ||
|
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 19.08.2014, 19:21 | |||
|
Добавлено через 5 минут
0
|
|||
|
Модератор
|
||
| 19.08.2014, 19:35 | ||
|
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 19.08.2014, 19:39 | |
|
Префиксный, так как постфиксный именно к нему и оптимизируется.
0
|
|
|
Модератор
|
|
| 19.08.2014, 20:15 | |
|
Так что "по стандарту" не получится
Там даже внутри циклов оба варианта используются.Видать, в комитете по стандартизации С++ тоже любители потроллить сидят ![]() Выход, видимо, один - разобраться с пониманием того, что использовать и как, а не слепо копировать стандарт или авторитетов.
0
|
|
| 19.08.2014, 21:08 | |
|
Вот ведь вопрос серьезный, как у остроконечников/тупоконечников Свифта. Если смотреть с точки зрения ассемблерного листинга, то вроде как одна бабка говорит, что префиксная эффективнее. А если забыть про эти копейки и смотреть с точки зрения стройности кода, то разработчики С (а не С++, кстати) вполне правильно сделали, придумав оба варианта, и в примерах кода применяют тот, который нагляднее отражает суть задачи - в последнем скрине пример заполнения массива по индексу, ну коряво бы выглядело начинать с -1 и делать предынкремент, гораздо стройнее смотрится начинать индекс с нуля и делать постинкремент.
ЗЫ а если счетчик еще и беззнаковый, то при предынкременте начинать надо вообще с 255 если он восьмибитный и с других чисел, если другой размер типа. И зачем с этим корячиться, если есть постинкремент?
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 19.08.2014, 21:11 | |
|
А какое отношение цикл имеет к стартовому индексу? Этот блок в любом случае выполняется после тела.
0
|
|
| 19.08.2014, 21:15 | |
|
Если это так, тогда это я лохЪ, поскольку не применяю предынкремент по причине моего незнания и вытекающей из него неуверенности
Тогда надо вышенаписанное мной считать бредом, а мне учить предынкремент ))))
0
|
|
| 19.08.2014, 22:11 | |
|
0
|
|
| 19.08.2014, 22:23 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 4
|
||||||
| 27.06.2015, 04:50 | ||||||
i1= 1 i2= 1 i1= 2 i2= 1
0
|
||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||
| 27.06.2015, 07:38 | ||||
|
Вопрос внимательнее прочти и обрати внимание на дату...
А насчет
0
|
||||
|
0 / 0 / 0
Регистрация: 21.02.2016
Сообщений: 2
|
|
| 24.02.2016, 23:15 | |
|
опоздал)
0
|
|
|
Вездепух
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,220
|
|
| 25.02.2016, 03:27 | |
|
Во-первых, у префиксного и постфиксного инкремента разная семантика результата. Первый возвращает новое значение (как lvalue), второй - старое значение (как rvalue). Поэтому в реальном коде следует выбирать именно тот вариант, который возвращает именно нужный вам результат. Это - главный критерий выбора между префиксным и постфиксным вариантами.
В-вторых, когда возвращаемое значение оператора роли не играет вообще (игнорируется), как в вышеприведенном примере с 'for', предпочтительнее применять именно префиксный вариант. В общем случае, префиксный вариант эффективнее, ибо он не требует создания копии объекта с сохраненным старым значением. Именно так, через создание копии со старым значением в общем случае реализуется постфиксный инкремент. Особо умный компилятор может уметь оптимизировать код постфиксного инкремента в ситуациях, когда результат оператора игнорируется, тем самым устраняя разницу в производительности. Но полагаться на это не стоит. В-третьих, вышесказанные соображения эффективности применимы в первую очередь к относительно "тяжелым" пользовательским типам, и не играют роли при работе с фундаментальными типами, такими как 'int'. Тем не менее, для единообразия в С++ принято придерживаться префиксного инкремента. В языке С, где инкремент применим только к фундаментальным типам, не имеет значения, какой вариант применять (разумеется, только в ситуациях, когда вы игнорируете результат оператора). В-четвертых, никакого "как в стандарте" тут нет и быть не может. Стандарт такими вопросам не занимается.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 25.02.2016, 03:54 | ||
|
научились оптимизировать неиспользуемые значения.
0
|
||
| 25.02.2016, 03:54 | |
|
Помогаю со студенческими работами здесь
40
Разница между вариантами цикла Есть ли разница в оптимизации между определением переменной до цикла Написать программу, преобразующую строку в префиксной форме в строку в постфиксной форме В чем разница между этими двумя способами записи? построить выражение в префиксной записи Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|