@DjTolib

Где то слышал что префиксный инкремент работает быстрее чем постфиксный. Это так?

int i = 0;
i++;
++i;
  • Вопрос задан
  • 196 просмотров
Решения вопроса 3
gbg
@gbg Куратор тега C++
Баянист. Тамада. Услуги.
Все уже изучено

Коротко - используйте везде префиксный, тогда отладочный код будет работать чуточку (или даже существенно) быстрее, а сам код будет выглядеть крепко, основательно - как будто сениор писал.
Ответ написан
@res2001
Developer, ex-admin
Не замерял скорость. И даже не смотрел в дизасемблере реализацию.
Но предлагаю просто разложить обе операции на примитивные ассемблерные инструкции (где нет инкремента, данные хранятся в памяти, а считаются в регистрах). Примерно так будет в псевдокоде:
int preinc(int i) {
  mov r1, [i];
  add r1, 1;
  mov [i], r1;
  return r1;
}
int postinc(int i) {
  mov r1, [i];
  mov r2, r1;
  add r2, 1;
  mov [i], r2;
  return r1;
}

Видно, что у постфиксного варианта на одну операцию больше, чем у префиксного. А так же постфиксный использует 2 регистра, тогда как префиксный 1.
Логика работы префиксного проще и понятней. Так что используйте по умолчанию всегда префиксный. И только тогда когда действительно необходимо постфиксный.

А теперь представьте, что операция производится не надо встроенным типом, а надо классом. В этом случае дополнительные затраты могут быть гораздо существенней.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы