2011-01-04 18 views

Respuesta

26

Su primer caso (para con expresiones vacías) es un infinita bucle y la segunda (con cuerpo vacío de la para declaración) es un bucle

+4

Para el registro, el cuerpo de un loop vacío también se puede omitir explícitamente: 'for (initialization; condition; updation) ; ' –

+0

@ Péter Sí, y esa declaración vacía se llama 'declaración nula'. Se aplica a las declaraciones 'while' también. –

+4

y las dos no son mucoivas: 'for (;;);' es un bucle infinito vacío! – ybungalobill

4

vacío En mi entorno se es como este:

for(;;) { statements; } 

bucle sin fin

for(initialisation;condition;updation) { } 

bucle vacío

2

Es igual a lo siguiente:

while (true) { 
    statements; 
} 

infinito por bucle es un bucle que funciona hasta que otra cosa lo detiene.

+1

Eso es un bucle * infinito, no uno vacío ... –

+0

@Martin, he comentado la respuesta en sí, no su comentario, disculpe la confusión :-) –

+0

Gracias, respuesta editada. –

2

La respuesta depende del contexto.

Si se refiere a un bucle vacío para, entonces

for(;;) 
{ 
    statements; 
} 

es tal cosa.

Aunque, la misma cosa se puede lograr con un bucle while:

while(true) 
{ 
    statements; 
} 

y esto no es un bucle de "vacío". Ambos son bucles infinitos de los que debe salir utilizando break dentro de su bucle.

Por otro lado,

for(initialisation;condition;updation) 
{ 
} 

esto es un bucle "vacío" que Bascially no hace nada, excepto tal vez actualizar algunas variables que podrían definirse antes del bucle en sí.

+0

El último by-loop podría hacer muchísimas cosas, ya que la actualización puede tener todo tipo de efectos secundarios; si lo desea, podría rellenar la mayor parte de su aplicación. Ciertamente desaconsejo desde el punto de vista de la mantenibilidad, pero suponiendo que el último "básicamente no hace nada" cuando encuentras un bucle en un código desconocido ciertamente no es sabio. – Inca

+0

Creo que necesita editar, afirma que el primer bucle 'for' está vacío y no está vacío. – unwind

1

Un bucle vacío es un bucle que tiene un cuerpo vacío, p.

for(int i = 0; i < 10; ++i) {} 
while(cin) {} 

(tenga en cuenta que el segundo ejemplo que aquí también pasa a ser interminable)

Hay casos en que éstos son útiles, por ejemplo, cuando una función tiene un efecto secundario deseado y devuelve su éxito, y debe repite hasta infructuosos, por ejemplo, para leer la última línea de un archivo:

std::string getLastLine(std::string filename) 
{ 
    std::ifstream in(filename.c_str()); 
    if(!in) 
    return ""; 

    std::string line; 
    while(std::getline(in, line)); // empty loop, the operation returns the condition 
    return line; 
} 
Cuestiones relacionadas