Есть ли какие-либо штрафы за производительность 1-го образца против 2-го и почему?
// 1. variable is declared inside the loop body
while(isSomethingTrue == true) {
std::string str;
findStr(str); // str initialization
processStr(str); // processStr does not change its argument
}
// 2. variable is declared outside the loop body
std::string str;
while(isSomethingTrue == true) {
findStr(str);
processStr(str);
}
В общем случае будут накладные расходы на выполнение конструктора/деконструктора вашего объекта за итерацию цикла, если это не простые старые данные. В случае строки: выделение и освобождение str внутреннего буфера. Это влияет только на производительность, если findStr и processStr также очень эффективны.
Хорошей практикой является создание переменных внутри цикла, чтобы гарантировать, что их область действия ограничена этим циклом. Кроме того, важно объявить, что переменные, близкие к их, будут использоваться, как вы можете.
Вот еще одно сообщение с дополнительной информацией об этом:
Объявление переменных внутри циклов, хорошей практики или плохой практики?
findStr
иprecessStr
не тривиальны, это, вероятно, не проблема. Сначала сравните, спросите позже.