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