No hay buena razón hasta donde yo sé. Está intencionalmente engañando a las personas mediante el uso de un bucle for que no incrementa nada.
Actualización:
Basado en el comentario de la OP a la pregunta, puedo especular sobre cómo es posible que vea una construcción de este tipo de código real. He visto (y utilizados) esto antes:
lots::of::namespaces::container::iterator iter = foo.begin();
for (; iter != foo.end(); ++iter)
{
// do stuff
}
Pero eso es por lo que yo voy con dejar las cosas fuera de un bucle para. Quizás su proyecto tenía un ciclo que se parecía a eso al mismo tiempo. Si agrega un código que elimina elementos de un contenedor en el medio del ciclo, es probable que tenga que controlar cuidadosamente cómo se incrementa iter
. Eso podría conducir a código que se parece a esto:
for (; iter != foo.end();)
{
// do stuff
if (condition)
{
iter = foo.erase(iter);
}
else
{
++iter;
}
}
Sin embargo, eso no es excusa para no tomar las cinco segundos necesarios para convertirla en un bucle while.
Ambos códigos de muestra son correctos y hacen lo mismo. Pero no hay ninguna razón para usar la segunda declaración. Cuando hay una avatabilidad de sintaxis adecuada, ¿por qué quieres usar la segunda? Entonces, la única razón para usar la segunda declaración es conocer diferentes tipos de código y creo que solo debe usarse con fines educativos. –
He visto este último en un proyecto y me gustaría saber las razones por las que podría haber aparecido. – sharptooth
Las ideas de estilo de los pueblos difieren, a menudo bruscamente, y a menudo en formas que yo no esperaría. Alguien puede haber querido estandarizar la declaración para todos los bucles, por alguna razón que parecía tener sentido en ese momento. No hay diferencia funcional –