Auswertungsreihenfolge von Parametern
-
Morgen beisammen,
folgendes Konstrukt:
this->foo(bar(), _einMember);kann ich sicher sein, dass
bar()ausgeführt wird, bevor_einMembergelesen wird?
-
Du kannst sicher sein das bar() ausgeführt wurde bevor _einMember in foo verwendet wird. Falls es das ist was du meinst.
Wenn ich mich recht erinnere werden parameter zu funktionsaufrufen von Rechts nach links abgearbeitet. Da könnte ich aber falsch liegen.
BR
Vinzenz
-
http://en.wikipedia.org/wiki/X86_calling_conventions
Sollte schon in Ordnung sein.
-
zwutz schrieb:
kann ich sicher sein, dass
bar()ausgeführt wird, bevor_einMembergelesen wird?Nein, die Auswertungsreihenfolge ist unspezifiziert. Mit der Calling Convention, insbesondere mit der Reihenfolge, in der die Argumente übergeben werden, hat das auch überhaupt nichts zu tun.
-
zwutz schrieb:
folgendes Konstrukt:
this->foo(bar(), _einMember);kann ich sicher sein, dass
bar()ausgeführt wird, bevor_einMembergelesen wird?Nein. Beispiel:
struct S { int _einMember; int bar() { return 10* _einMember++; } void foo(int i1, int i2) { cout << i1 << ' ' << i2 << endl; } void do() { this->foo(bar(), _einMember); } }; int main() { S s; s._einMember = 5; s.do(); }ergibt entweder "50 5" oder "50 6", je nachdem ob zuerst _einMember übergeben und dann bar() ausgewertet und übergeben wird oder andersrum.
-
verdammt... danke
naja, kein Beinbruch, wollte mir nur die zusätzliche Zeile sparen