CppCheck находит мне некоторые выводы, например: «Область действия переменной« x »может быть уменьшена».
Что делать, если у меня такая ситуация:
int x;
for (int i = 0; i != 10; ++i)
{
x = someFunction();
// ... I use x variable here
}
Я думаю, что мой код в порядке. Как вы думаете? Должно ли это измениться на что-то подобное?
for (int i = 0; i != 10; ++i)
{
int x = someFunction();
// ... I use x variable here
}
Во втором коде переменная x определена для всей итерации … Я думаю, это не совсем нормально (не оптимально).
Если переменная x не используется вне цикла, тогда второй подход намного лучше. И нет никаких проблем с оптимизацией кода. Память для переменной выделяется только один раз в цикле.
положение int
декларация не влияет на производительность, поэтому Cppcheck прав, когда поднимает эту проблему стиля. Эта проблема стиля может быть применена и к нетривиальным типам,
for (int i = 0; i != 10; ++i)
{
MyType x = someFunction();
// ... I use x variable here
}
поскольку конструкторы, как правило, так же эффективны, как и присваивания. Начиная с версии 1.65, Cppcheck, кажется, не различает тривиальные и нетривиальные типы.
Но не следует слепо следовать таким советам по стилю, будут случаи нетривиальных типов, когда назначение более эффективно, чем построение. (Как обычно: если сомневаетесь в производительности, измерьте!)
Как уже упоминалось, для тривиальных типов это вряд ли окажет существенное влияние на производительность.
Однако вам также следует учитывать, что, уменьшая область видимости, вы повышаете удобочитаемость, приближая объявление к использованию и, что еще важнее, облегчая его рефакторинг.
Оба из них могут быть важны при рассмотрении ремонтопригодности.
Мы все знаем, что мы должны держать функции короткими и хорошо рефакторизованными, но мы все видели тех монстров длиной 5000 строк, где переменная была объявлена вверху и использовалась один раз, 3789 строк. А если нет, пожалейте остальных из нас.