Если i
является типом POD (как int
, показанный в вашем примере), почти наверняка не будет никакой разницы.
Если i
относится к какому-либо типу, который имеет нетривиальный конструктор или оператор присваивания, который делает что-то захватывающее, тогда может быть огромная разница, и вам придется сравнить, что делают соответствующие конструкторы и операторы присваивания. Если оба блока введены, вам нужно будет рассмотреть и деструктор.
В общем, вам не стоит об этом беспокоиться. Используйте более чистый подход и объявите переменную в максимально ограниченной области действия, максимально приближенной к ее первому использованию, и выполните ее рефакторинг только в том случае, если ваш профилировщик скажет вам, что это проблема производительности.