Heim >Backend-Entwicklung >C++ >Wie unterscheidet sich die Operatorpriorität von der Auswertungsreihenfolge in der Programmierung?

Wie unterscheidet sich die Operatorpriorität von der Auswertungsreihenfolge in der Programmierung?

Susan Sarandon
Susan SarandonOriginal
2024-12-21 04:31:12961Durchsuche

How Does Operator Precedence Differ from the Order of Evaluation in Programming?

Welche Beziehung besteht zwischen der Operatorpriorität und der Reihenfolge der Auswertung?

Entgegen der landläufigen Meinung bestimmt die Operatorpriorität die Reihenfolge der Auswertung nicht vollständig Evaluation in der Programmierung. Während der Vorrang die Reihenfolge der Wertberechnungen bestimmt, bleibt die Bewertung der Operanden selbst unabhängig vom Vorrang.

Beispiel:

Betrachten Sie den Ausdruck x < y < z. Vorrangregeln schreiben vor, dass es als (x < y) < analysiert werden soll. z. Eine Stapelmaschine könnte den Ausdruck jedoch beispielsweise wie folgt auswerten:

push(z);
push(y);
push(x);
test_less();  // compares TOS to TOS(1), pushes result on stack
test_less();  // compares TOS to TOS(1), pushes result on stack

Dies wertet z vor x oder y aus, wertet aber immer noch (x < y) aus und vergleicht das Ergebnis mit z, as beabsichtigt.

Bewertung und Nebenwirkungen:

Nebenwirkungen, wie z. B. Erhöhung oder B. das Dekrementieren einer Variablen, werden konzeptionell von einem separaten Thread ausgeführt. Dieser Thread wird am nächsten Sequenzpunkt verbunden. Betrachten Sie den Ausdruck a = b c;. Es könnte wie folgt ausgeführt werden:

push(a);
push(b);
push(c+1);
side_effects_thread.queue(inc, b);
side_effects_thread.queue(inc, c);
add();
assign();
join(side_effects_thread);

Hier wird a vor b oder c ausgewertet, obwohl es das Ziel der Zuweisung ist. Der Versuch, eine Variable in einem anderen Teil eines Ausdrucks vor dem nächsten Sequenzpunkt zu verwenden, führt zu undefiniertem Verhalten.

Das obige ist der detaillierte Inhalt vonWie unterscheidet sich die Operatorpriorität von der Auswertungsreihenfolge in der Programmierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn