Лучший ответ заключается в том, что ++i будет иногда быстрее, но не медленнее.
Все, кажется, предполагают, что i является обычным встроенным типом, таким как int. В этом случае не будет заметной разницы.
Однако, если i является сложным типом, вы можете найти измеримую разницу. Для i++ вы должны сделать копию своего класса, прежде чем увеличивать его. В зависимости от того, что связано с копией, оно действительно может быть медленнее, поскольку с помощью ++it вы можете просто вернуть окончательное значение.
Другое отличие состоит в том, что с ++i вас есть возможность вернуть ссылку вместо значения. Опять же, в зависимости от того, что участвует в создании копии вашего объекта, это может быть медленнее.
Реальным примером того, где это может произойти, будет использование итераторов. Копирование итератора вряд ли будет бутылочной горловиной в вашем приложении, но все же хорошей практикой является привычка использовать ++i вместо i++ где результат не i++.