2012-07-31 12 views
7

Niedawno widziałem następujące w kodzie:Co to za dziwna, warunkowa składnia operatora?

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

Jeśli a < b, następnie a=b jest wykonywany i bRes jest prawdą. Co dokładnie się tutaj dzieje? Dokumenty dla operatora warunkowego nie wspominają nic o łańcuchach wyrażeń.

edytuj: dla jasności Dostaję warunkową część operatora, jest to a=b, true jako pojedyncze wyrażenie, które mnie zdezorientowało.

+2

to operator przecinek ... – MFH

Odpowiedz

11

Eww. Jest to użycie urządzenia comma operator. a=b, true robi dokładnie to, co powiedziałeś. Wykonuje każde wyrażenie i daje wartość ostatniego wyrażenia.

+1

+1 eww ... była moja pierwsza reakcja, jak również. –

+1

+1 Hahahaha ... jeszcze nie widziałeś prawdziwego "eww" wykorzystania operatora przecinków. Moją ulubioną postacią jest [koder zakresów bez nośników Subbotin] (http://koders.com/cpp/fidAD810238688D2DDBC02B8FAF0A8EAC8DBD68604D.aspx?s=subbotin#L21). Po prostu spójrz na tę linię przez mniej niż 30 sekund, a następnie spróbuj wyjaśnić, co się dzieje. – Damon

+0

Bardzo fajne, dzięki! – nolegs

4

To jest poprawny kod, ale napisany w dziwnym stylu. Język pozwala w ten sposób korzystać z operatora przecinka.

Odpowiednikiem jest

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

to jest DUŻO lepszego sposobu pisania tego samego. Dobra robota! –

+0

Ale teraz to zadanie, a nie inicjalizacja. W oryginalnym kodzie moglibyśmy zadeklarować 'bRes' jako' const' ... –

+2

@KerrekSB: Dobrze. Co powiesz na 'const bool bRes = a Andrey

Powiązane problemy