was macht C da?
-
sorry hab das Danke vergessen...
...Danke fuer die antwort
-
Also sehe ich das richtig?
int global = 10; void foo() { global *= 10; } void bar() { global -= 4; } int main() { int i = (foo(), bar(), global); }
Ist i jetzt 96 oder was?
-
Ja.
-
i ist jetzt 96.
Sorry für Doppelpost. Ist mir zu spät eigefallen, das Ja etwas kurz ist.
-
Original erstellt von <C Newbie>:
i ist jetzt 96.Sicher? IIRC ist beim Kommaoperator (wie auch bei so gut wie allen anderen) die Auswertungsreihenfolge undefiniert.
-
Also in C wird der Kommapertaor von links nach rechts ausgewertet. Bin mir im Moment nicht sicher, ob das auch für C++ gilt.
-
Ups, ich sehe grade, dass Hume oben schon die Antwort auf die Frage der Auswertung gegeben hat:
Nach der Regel für die Auswertung des Kommaoperators.
Dieser wird von links nach rechts ausgewertet.
-
wenn die Reihenfolge der Auswertung undefiniert wär, dann würde der , Operator doch eigentlich keinen Sinn machen
-
Original erstellt von kingruedi:
wenn die Reihenfolge der Auswertung undefiniert wär, dann würde der , Operator doch eigentlich keinen Sinn machendoch.
a) zum leute-ärgern. siehe double a[3,4]; nebst allen anderen cout<<a[x,y]
b) zum klammern-sparen bei while(bla)x*=1.01,y*=1.02;
c) als abschreckendes beispiel.
-
wenn man den Kommaoperator überlädt, wird die Reihenfolge übrigens undefiniert.
-
-
Sicher? IIRC ist beim Kommaoperator (wie auch bei so gut wie allen anderen) die Auswertungsreihenfolge undefiniert.
Es gibt Situationen in denen ein Komma auftritt und die Auswertungsreihenfolge nicht festgelegt ist. Das gilt z.B. für die Auswertung von Funktionsargumenten (die ja bekanntlich durch ein Komma getrennt sind). In diesem Fall ist das Komma aber nicht im Sinne des Komma-Operators aktiv sondern nur als Trennzeichen.
Überall dort, wo das Komma den Komma-Operator repräsentiert und wo selbiger Operator nicht Überladen wurde ist die Auswertungsreihenfolge durch den Standard garantiert.