mutaforme Inviato 28 Marzo 2008 Segnala Condividi Inviato 28 Marzo 2008 scusate ma se scrivo if (i<j , 1) la condizione è sempre verificata perché considera solo la seconda espressione (cioè 1) ?? L'ho scoperto stasera a mie spese, per sbaglio c'era un if con un "virgola-variabile" e il software ovviamente faceva cose impreviste... Mi sembra una di quelle cose del C++ fatte apposta per creare bug. mah Pancho was a bandit boy, his horse was fast as polished steel He wore his gun outside his pants ----- Il Principe diventa Re, nella notte di Madrid. Link al commento Condividi su altri siti Altre opzioni di condivisione...
gigabytes Inviato 28 Marzo 2008 Segnala Condividi Inviato 28 Marzo 2008 hai ragione è proprio così che funziona. L'operatore virgola valuta tutte le espressioni nella lista ma restituisce il valore solo dell'ultima. Anche se può sembrare strana come cosa.. non è fatta per creare bug ma è utile qualche volta. Viene usato soprattutto per fornire condizioni multiple nel ciclo for. Pensa per esempio a un codice che vuole l'indice di un elemento che deve cercare all'interno di una lista concatenata. Usando l'operatore virgola si può arrivare ad una forma compattissima e molto efficiente con una sola riga: for(int i = 0, p = testa; p->next && p->val != cercato; i++, p = p->next); Alla fine del for (che non ha neanche bisogno di un corpo) la variabile i contiene l'indice voluto. Questo codice può anche essere più efficiente della controparte con la manipolazione di i dentro al corpo, perchè molti compilatori ottimizzano parecchio i cicli. L'operatore non è limitato a due espressioni, possono essercene anche più di una. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.