2011-01-04 10 views

risposta

26

Il tuo primo caso (per con le espressioni vuote) è un infinita loop e la seconda (con il corpo vuoto del per economico) è un vuoto ciclo

+4

Per il record, il corpo di un lop vuoto può essere omesso esplicitamente anche: 'for (inizializzazione, condizione, aggiornamento) ; ' –

+0

@ Péter Sì, e quell'istruzione vuota è chiamata 'dichiarazione nulla'. Si applica anche alle istruzioni 'while'. –

+4

e i due non sono mutexive: 'for (;;);' è un ciclo infinito vuoto! – ybungalobill

4

Nel mio ambiente è è come questo:

for(;;) { statements; } 

ciclo infinito

for(initialisation;condition;updation) { } 

ciclo vuoto

2

E 'uguale a quello:

while (true) { 
    statements; 
} 

Infinite per il ciclo è un ciclo che funziona fino a qualcos'altro lo arresta.

+1

Questo è un ciclo * infinito *, non uno vuoto ... –

+0

@ Martin, ho commentato la risposta in sé, non il tuo commento - scusa per la confusione :-) –

+0

Grazie, risposta modificata. –

2

La risposta dipende dal contesto.

Se si intende un vuoto per ciclo, quindi

for(;;) 
{ 
    statements; 
} 

è una cosa del genere.

Sebbene, la stessa cosa può essere realizzato con un ciclo while:

while(true) 
{ 
    statements; 
} 

e questo non è un loop "vuoto". Entrambi sono infiniti cicli che è necessario interrompere utilizzando break all'interno del ciclo.

D'altra parte,

for(initialisation;condition;updation) 
{ 
} 

questo è un loop "vuoto" che non fa bascially nulla, eccetto forse aggiornare alcune variabili che potrebbero essere definiti prima del ciclo stesso.

+0

L'ultimo ciclo può fare molto e molte cose, perché il updatestatement può avere tutti i tipi di effetti collaterali - se lo si volesse si potrebbe riempire la maggior parte della propria applicazione. Certamente sconsiglio dal punto di vista della manutenibilità, ma partendo dal presupposto che l'ultimo "in pratica non fa nulla" quando si trova un tale ciclo in codice sconosciuto non è certamente saggio. – Inca

+0

Penso che devi modificare, stai sostenendo che il primo ciclo 'for' è vuoto e non vuoto. – unwind

1

Un ciclo vuoto è un ciclo che ha un corpo vuoto, ad es.

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

(si noti che il secondo esempio qui avviene anche per essere infinita)

ci sono casi in cui essi sono utili, per esempio quando una funzione ha un effetto collaterale desiderato e restituisce il suo successo, e dovrebbe ripetuto fino a quando riesce, ad esempio per leggere l'ultima riga in un file:

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; 
}