2012-07-31 12 views
7

Recentemente ho visto quanto segue nella codebase:Qual è questa sintassi dell'operatore condizionale strano?

bool bRes = (a < b) ? a=b, true : false; 

Se a < b, quindi a=b viene eseguito e bRes è vero. Cosa sta succedendo esattamente qui? I documenti per l'operatore condizionale non menzionano nulla sul concatenamento di espressioni.

modifica: per essere chiari ottengo la parte operatore condizionale, è la a=b, true come una singola espressione che mi ha confuso.

+2

che è l'operatore virgola ... – MFH

risposta

11

Eww. Questo è un uso del comma operator. a=b, true fa esattamente quello che hai detto. Esegue ogni espressione e restituisce il valore dell'ultima espressione.

+1

+1 eww ... è stata la mia prima reazione pure. –

+1

+1 Hahahaha ... non hai ancora visto un vero uso "eww" dell'operatore virgola. Il mio preferito di tutti i tempi si trova in [coder per la gamma di portate senza supporto di Subbotin] (http://koders.com/cpp/fidAD810238688D2DDBC02B8FAF0A8EAC8DBD68604D.aspx?s=subbotin#L21). Basta guardare quella linea per meno di 30 secondi e poi provare a spiegare cosa sta succedendo. – Damon

+0

Molto bello, grazie! – nolegs

4

Questo è un codice corretto, ma scritto in uno stile strano. La lingua consente di utilizzare l'operatore virgola in questo modo.

L'equivalente è

bool bRes; 
if (a < b) 
{ 
a = b; 
bRes = true; 
} 
else 
bRes = false; 
+0

questo è un modo MOLTO migliore di scrivere la stessa cosa. Buon lavoro! –

+0

Ma ora è compito e non inizializzazione. Nel codice originale, potremmo aver dichiarato 'bRes' come' const' ... –

+2

@KerrekSB: buon punto. Che ne dici di 'const bool bRes = a Andrey