operator, ?
-
Hi,
ich verstehe nicht, was Kommaoperator soll:
int a = (10,20); cout << a;
Ausgabe: 20
Ist das, was er macht, nicht definiert und daher nimmt der in diesem Fall einfach den letzten Parameter oder hat er eine bestimmte Bedeutung, wenn ja, wieso dann einfach der letzte Parameter?
Danke im Voraus,
MfG MAV
PS: Hm, also ohne Klammern kompiliert er's jetzt nicht...
-
Mis2com schrieb:
Ist das, was er macht, nicht definiert und daher nimmt der in diesem Fall einfach den letzten Parameter oder hat er eine bestimmte Bedeutung, wenn ja, wieso dann einfach der letzte Parameter?
Genau das ist die Definition dieses Operators: Beide Ausdrücke (rechts und links vom Komma) werden ausgewertet und das Ergebnis ist das des rechten Ausdrucks.
p.s.:
Mis2com schrieb:
PS: Hm, also ohne Klammern kompiliert er's jetzt nicht...
Ein Tipp: = hat eine höhere Priorität als der ,-Operator.
-
Hallo,
der Kommaoperator wird *garantiert* von links-nach-rechts ausgewertet, wobei das Ergebnis des gesamten Ausdrucks das Ergebnis der Auswertung des am Weitesten rechts stehenden Ausdrucks ist.
Beispiel:void func(); int main() { int i = (func(), 2); }
Hier wird zuerst func() aufgerufen. Das Ergebnis ist void. Danach wird die 2 ausgewertert. Das Ergebnis ist vom Typ int und hat den Wert 2. Dies ist gleichzeitig auch das Ergebnis des gesamten Ausdrucks. Mit diesem Ergebnis wird dann i initialisiert. i ist also 2.
Mit dem Kommaoperator kannst du also mehrere Seiteneffekte in einem Ausdruck unterbringen. Das ist manchmal sinnvoll (und häufiger nicht sinnvoll). Bsp: Du hast eine for-Schleife und willst im Update-Teil zwei Variablen hochzählen.
So geht's nicht:for(int i = 0; i < 10 && j != WasWeißIch; ++i; ++j) ...
Hier hilft der Kommaoperator:
for (int i = 0; i < 10 && j != WasWeißIch; ++i, ++j) ....
Wichtig: Nicht den Kommaoperator mit dem Komma in einer Aufzählung (z.B. bei Funktionsargumenten) verwechseln. Das sind zwei gänzlich verschiedene Dinge.
-
Ein Tipp: = hat eine höhere Priorität als der ,-Operator.
Ja, sowas in der Art hatte ich mir schon gedacht.
OK, danke.