@YAnri

Какая разница в цикле for между «i ++» и «++ i»?

Hey,
Подскажите пожалуйста какая разница в цикле for между "i ++" и "++ i"?
напр.
for(int i=1;i<=10;i++)
	{
		cout<<i;
	}


и

for(int i=1;i<=10;++i)
	{
		cout<<i;
	}


Я знаю какая разница между "i ++" и "++ i"
Но какая разница что в for будет i ++ или ++ i, это не меняет никакого значения, так почему тогда некоторые программисты в одном цикле пишут i ++, а в другом ++ i?

Буду очень рад если получу ответ на этот вопрос :)
Спасибо заранее.
  • Вопрос задан
  • 7165 просмотров
Пригласить эксперта
Ответы на вопрос 5
dom1n1k
@dom1n1k
В данном случае присваивания не делается, поэтому никакой разницы в смысле результата работы нет.
Есть разница в смысле скорости (++i работает немного быстрее), но она настолько микроскопическая, что на неё нужно смело забивать в 99.(9)% случаев. Возможно даже, что сейчас компиляторы ловят эту ситуацию и тогда разница исчезает вовсе.
Сам я пишу ++i, но не ради перфоманса, это просто моя исторически сложившаяся вкусовщина.
Нужно просто выбрать один кодстайл (личный или корпоративный) и придерживаться его. Смешивать два варианта в пределах одной программы - это плохо.
Ответ написан
Комментировать
SerafimArts
@SerafimArts
Senior Notepad Reader
Как уже верно было сказано - в алгоритме отличий нет. Отличия лишь в выходном коде которые могут гененрировать компиляторы. Могут, просто потому, что эта инструкция допускает оптимизации во время компиляции. Так что всё зависит от самого компилятора.

Ещё с универа помню, объясняли, что на уровне ассемблера ++i превращается в одну инструкцию инкремента, i++ же в две (или одну, но не инкремемента, а обычного add), отсюда и отличия в производительности. P.S. Эта информация не точная и могу наврать, но в целом как-то так.
Ответ написан
@ColdSpirit
Как видно, разницы выходящего кода из gcc 8.1 никакой: https://godbolt.org/g/bwa482
Можете проверить на остальных версиях/компиляторах - не забудьте поделиться открытиями! =)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В данном конкретном случае разницы нет.
Ответ написан
Комментировать
@codefln
Такой результат обусловлен алгоритмом работы for:

1.Выполнить присвоение i=1
2. Проверить i <= 10
3. Если верно – выполнить тело цикла, затем выполнить i++

Увеличение i++ выполняется отдельно от проверки условия (2), значение i при этом не используется, поэтому нет никакой разницы между i++ и ++i.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы