PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Post(in/de)krement-Operatoren



Liberty
09-11-2006, 14:06
Moin,

ist mal wieder eine rein akademische Frage, die mir nicht mal mein Dozent beantworten konnte...

Wann werden Post(in/de)krement-Operatoren in welcher Reihenfolge abgearbeitet?

Ich hab' eine ganze Weile in der Language Specification (3rd Ed.) gesucht und war entweder zu blöd, oder es steht tatsächlich nicht drin.

Also rein experimentell habe ich festgestellt, dass die nach Evaluierung aller anderen Operatoren eines Statements abgearbeitet werden, aber irgendwo muss dieses Verhalten doch auch definiert worden sein, wir sind hier ja nicht bei ANSI-C...

Wäre schön, wenn irgendwer von euch da eine passende Quelle in der Hinterhand hätte, danke schon mal im voraus.

So long,

Liberty

bischi
09-11-2006, 17:15
afaik wird ++i abgearbeitet, bevor irgend was anderes in der selben Zeile passiert. Und i++ nach dem Rest der Zeile... Vielleicht ist es aber auch anders, wenn dus noch speziell klammerst. Ebenfalls keine Ahnung, was passiert, wenn du so was machst:

a= a + (++(--(i++)));

Aber wieso willst du das genau wissen? Das spielt doch im Normalfall eh keine Rolle, da eindeutig. Und sonst machst du halt ein

i=i+1;

dann ist es erst recht eindeutig...

MfG Bischi

peschmae
09-11-2006, 17:43
Ich weiss die Antwort ja auch nicht. ;)

Aber wieso meinst du, die Reihenfolge müsste definiert sein? Hast du ein Beispiel wo das überhaupt unterscheidbar ist?
Jetzt mal von "i = i++" abgesehen, das macht eh keiner. Ausser man suche einen nicht zufälligen Zufallszahlengenerator ;)

@bischi: das kompiliert nicht; i++ ist kein lvalue...

MfG Peschmä

bischi
09-11-2006, 17:47
@bischi: das kompiliert nicht; i++ ist kein lvalue...

Gut möglich ;) Würde so was auch nie machen :D

MfG Bischi

Liberty
09-11-2006, 19:32
Moin,

die Frage ist aufgekommen, weil ich vorgestern an der Uni in einem Java-Kurs mal demonstrativ Compiler gespielt habe und ich die Frage nach der genauen Definition der Post(in/de)krement-Operatoren ist als einzige übrig geblieben, nachdem das Verhalten aller anderen Operatoren eindeutig war und logisch nachvollzogen werden konnte. Mein Übungsgruppenleiter wusste da aber auch keinen Rat.

Das Statement, dass die Frage bei mir ausgelöst hat, war übrigens:

a += (a += a--) + (a = i = a++);

Und da Java normalerweise nichts dem Zufall überlässt, war ich der Meinung, dass auch das Verhalten besagter Operatoren irgendwo förmlich definiert werden müsste.

Im Alltag arbeitet ja eh' niemand mit derartigen Konstrukten aber mein Hang zum Perfektionismus und die Tatsache, dass ich evtl. ab nächstem Semester selbst im Bereich Java als Übungsgruppenleiter eingesetzt werde, haben dann doch dazu geführt, dass ich das jetzt einfach wissen möchte...

So long,

Liberty

P.S. @bischi:
Rein experimentell habe ich schon mal rausgefunden, dass Klammern keinen Einfluss auf Post(in/de)kremt hat.