Sagen wir, wir haben Klasse A
:Auftrag der Auswertung in Ketten Aufruf in C++
class A {
public:
A& func1(int) { return *this; }
A& func2(int) { return *this; }
};
und 2 standlone Funktionen:
int func3();
int func4();
jetzt in diesem Code:
A a;
a.func1(func3()).func2(func4());
ist Reihenfolge der Auswertung der Funktionen func3()
und func4()
definiert?
Nach dieser Antwort Undefined behavior and sequence points einer der Sequenz Punkte sind:
- an einen Funktionsaufruf (ob oder ob nicht die Funktion inline ist), nach der Auswertung aller Funktionsargumente (falls vorhanden), die dauert Stellen Sie vor der Ausführung von Ausdrücken oder Anweisungen im Funktionskörper (
§1.9/17
).
Das Gleiche gilt für „Auswertung aller Funktionsargumente“ bedeutet, hat func3()
vor func4()
aufgerufen werden, die Auswertung von func1()
Argumente vor Aufruf von func2()
geschehen muss?
Fast ein Duplikat von [this] (http://stackoverflow.com/questions/2129230/cout-order-of-call-to-functions-it-prints/2129242#2129242), in Kürze nein. –
@MattMcNabb Ja, danke, behoben – Slava
Ähnlich wie die kompliziertere Beispiel in [Hat dieser Code aus "Die C++ Programmiersprache" 4. Ausgabe Abschnitt 36.3.6 wohldefiniertes Verhalten?] (Http://stackoverflow.com/q/27158812/1708801), aber ich gebe eine Menge Details in meiner Antwort, die hilfreich sein können, dies zu verstehen. Es gibt eine Reihe von miteinander verbundenen Problemen. –