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!