Есть часто используемые паттерны, которые компилятор умеет распознавать и оптимизировать на уровне машинного кода. Это позволяет вам не париться с оптимизацией переменных цикла и спопойно использовать итераторы, например.
Но это не освобождает от понимания, что строка - это не просто так объявленная переменная, она может оперировать памятью не только при создании, но и при изменении. Поскольку работа с памятью - куда более затратная операция, чем всякие там вычисления, при оптимизации нужно обращать внимание на то, действительно ли тебе требуется создавать переменную в цикле, например. Не рассчитывая, что процессор сделает это сам. Но только при оптимизации.