Reihenfolge der Auswertung beim Kettenaufruf in C ++

8

Nehmen wir an, wir haben die Klasse A :

%Vor%

und 2 eigenständige Funktionen:

%Vor%

jetzt in diesem Code:

%Vor%

ist die Reihenfolge der Auswertung der Funktionen func3() und func4() definiert?

Nach dieser Antwort Nicht definierte Verhaltens- und Sequenzpunkte sind einer der Sequenzpunkte :

  • bei einem Funktionsaufruf (ob die Funktion inline ist oder nicht), nach der Auswertung aller Funktionsargumente (falls vorhanden) welche erfolgt vor der Ausführung von Ausdrücken oder Anweisungen im Funktionskörper ( §1.9/17 ).

Also bedeutet "Auswertung aller Funktionsargumente", dass func3() vor func4() aufgerufen werden muss, da die Auswertung von func1() Argumenten vor dem Aufruf von func2() ? stattfinden muss.

    
Slava 30.07.2015, 21:33
quelle

2 Antworten

6

Der Kern davon ist, dass in einem Funktionsaufruf X(Y, Z) ; Auswertung aller X , Y , Z sind in Bezug aufeinander unbestimmt sequenziert. Die einzige Sequenzierung besteht darin, dass Y und Z sequenziert sind-vor der Aufruf der Funktion, für die X ausgewertet wurde.

Angenommen, wir haben:

%Vor%

Die drei Funktionen a , b , c können in beliebiger Reihenfolge aufgerufen werden. Dies gilt natürlich rekursiv für alle Unterausdrücke.

    
M.M 30.07.2015, 21:45
quelle
3

Nein, func3 und func4 können in jeder Reihenfolge ausgewertet werden (aber nicht verschachtelt).

    
rici 30.07.2015 21:35
quelle

Tags und Links