Vai al contenuto

C++ , funzionamento operatore virgola


mutaforme

Messaggi raccomandati

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 :ghghgh:

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

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

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...