Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75

    [C++] Ciclo for, dubbio sull'incremento

    Salve,
    avrei un dubbio sulla condizione di incremento nel ciclo for, ci sono differenze fra condizione preposta e posposta?
    Mi spiego meglio con un esempio, i seguenti due cicli for sono uguali oppure no?

    codice:
    for(int i = 0; i < 100; ++i) 
    {        
              if(i == 54)        
              {              
                   break;        
              } 
    }  
    return i;    
    
    
    for(int i = 0; i < 100; i++) 
    {        
                 if(i == 54)        
                 {              
                       break;        
                 } 
    }  
    return i;

    Tra i due cambia solo la condizione di incremento, ma il comportamento è identico?


    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Nel caso indicato, il codice generato è identico, quindi il comportamento è identico.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75
    Ciao,
    ti ringrazio per la risposta, ma la mia era una domanda più generica. L'esempio era solo per far capire la differenza tra ++i e i++ all'interno del for. Forse mi sono spiegato male, intendevo in generale se possono esserci problemi con cicli for differenti nell'incremento, strutturati come quelli dell'esempio.

    Perché mi è capitato in programmi più complessi che il comportamento fosse diverso (ad esempio quando scorro con degli iteratori), e volevo che qualcuno mi illustrasse brevemente il perché.

    Mi scuso se sono poco chiaro ma non riesco a spiegarmi meglio. Comunque posto per completezza il codice che mi da differenze di comportamento se cambio l'incremento.

    codice:
    InitProcesses::iterator it_cond;
    InitProcesses::iterator it_ret = m_init_processes.begin();
    bool cond_break = true;
    
    for (it_cond = m_init_processes.begin(); it_cond != m_init_processes.end() && cond_break; it_cond++)
        {
            if (processId == it_cond->second.processId)
            {
    	       cond_break = false;   // Force for break
            }
    	else
    	{
    	     it_ret++;
    	}
        }
        
        return it_ret;
    Quello postato è il corpo di una funzione che ritorna un iteratore e fa solo quello che vedete. Perché se uso ++it_cond mi da dei problemi in esecuzione? Ovvero il tutto non funziona più come dovrebbe.

    Grazie in anticipo a chi avrà la pazienza di rispondermi.

  4. #4
    La differenza per gli iteratori sta nel fatto che con la notazione postfissa si crea una copia inutile in più, per cui in genere è meglio preferire quella prefissa.
    Dato che nel tuo codice non si usa il valore restituito dall'espressione di incremento, non dovrebbero esserci differenze a livello di funzionalità.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.