Обычно вы найдете код STL следующим образом:
for (SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin(); Iter != m_SomeMemberContainerVar.end(); ++Iter)
{
}
Но у нас есть рекомендация написать это следующим образом:
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
Если вы беспокоитесь о области видимости, добавьте прилагаемые фигурные скобки:
{
SomeClass::SomeContainer::iterator Iter = m_SomeMemberContainerVar.begin();
SomeClass::SomeContainer::iterator IterEnd = m_SomeMemberContainerVar.end();
for (; Iter != IterEnd; ++Iter)
{
}
}
Предполагается, что это дает скорость и эффективность, особенно если вы программируете консоли, потому что функция .end() не вызывается на каждой итерации цикла. Я просто считаю, что повышение производительности является само собой разумеющимся, это звучит разумно, но я не знаю, сколько и это зависит от типа контейнера и фактической реализации STL. Но, используя этот стиль в течение пары месяцев, я действительно предпочитаю его в любом случае.
Причиной является читаемость: линия для линии аккуратная и аккуратная. С квалификаторами и переменными-членами в реальном коде производства довольно легко иметь действительно для строк, если вы используете стиль в первом примере. Вот почему я намеренно заставил его иметь горизонтальную полосу прокрутки в этом примере, просто чтобы вы поняли, о чем я говорю.;)
С другой стороны, вы внезапно вводите переменные Iter во внешнюю область цикла for. Но тогда, по крайней мере, в среде, в которой я работаю, Iter был бы доступен во внешней области даже в первом примере.
Как вы относитесь к этому? Есть ли какой-либо pro для первого стиля, кроме возможности ограничения объема Iter?