Обычно вы найдете 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 был бы доступен во внешней области даже в первом примере.
Что вы думаете об этом? Есть ли профессионалы в первом стиле, кроме, возможно, ограничения объема Iter?
не обязательно, в моей среде это законно и справедливо: «for (int i = 0; i
steffenj
2008-10-09 20:27:12
@Ferrucio: это недопустимо. C++. Возможно, вы используете более старую версию VC++, которая не соответствовала стандарту, но вам придется исправить это при обновлении – 2008-10-09 20:29:54
. Правда, старые компиляторы могут по-прежнему принимать старый стандарт. В VC++ у вас есть возможность включить или выключить этот параметр. – Ferruccio 2008-10-09 20:30:27