Нет good Причина, насколько мне известно. Вы намеренно вводите людей в заблуждение, используя for-loop, который ничего не увеличивает.
Update:
Основываясь на замечании ФПА к вопросу, я могу рассуждать о том, как вы могли бы видеть такую конструкцию в реальном коде. Я видел (и используется) это раньше:
lots::of::namespaces::container::iterator iter = foo.begin();
for (; iter != foo.end(); ++iter)
{
// do stuff
}
Но это, насколько я пойду с оставлением вещи из-за петли. Возможно, в вашем проекте была петля, которая выглядела так же, как в одно время. Если вы добавите код, который удаляет элементы контейнера в середине цикла, вам, вероятно, придется тщательно контролировать, как увеличивается iter
. Это может привести к коду, который выглядит следующим образом:
for (; iter != foo.end();)
{
// do stuff
if (condition)
{
iter = foo.erase(iter);
}
else
{
++iter;
}
}
Однако, это не повод не принимать пять секунд, необходимых для изменения его в то время как петли.
Оба образца кода являются правильными и делают то же самое. Но нет смысла использовать второй оператор. Когда есть правильный синтаксис avaialbe, почему вы хотите использовать второй. Тогда только причина использовать второй оператор - это знать код разного типа, и я думаю, что его следует использовать только в образовательных целях. –
Я видел последнее в одном проекте и хотел бы знать причины, по которым он мог появиться. – sharptooth
Народные идеи стиля отличаются, часто резко и часто способами, которых я не ожидал. Кто-то, возможно, хотел стандартизировать инструкцию for для всех циклов, по какой-то причине это, казалось, имело смысл в то время. Нет никакой функциональной разницы. –