Operatorpriorität und Assoziativität in Ausgabeströmen
In C kann das Verhalten des Ausgabestromoperators (<<) kontraintuitiv sein wenn mehrere Argumente angegeben werden. Auch wenn es den Anschein hat, als würden die Argumente von links nach rechts verarbeitet, ist das nicht immer der Fall.
Wie in den folgenden Codeausschnitten dargestellt, kann die Reihenfolge der Ausgabe je nach Platzierung des << Operator und die Anzahl der bereitgestellten Argumente.
myQueue.enqueue('a'); myQueue.enqueue('b'); cout << myQueue.dequeue() << myQueue.dequeue(); // prints "ba"
In diesem Fall ist der erste << Der Operator steht außerhalb der Klammern, sodass der erste Aufruf zum Entfernen aus der Warteschlange zuerst ausgewertet wird. Dieses Ergebnis wird dann als Argument für das zweite << verwendet. Operator.
Wenn jedoch der << Werden Operatoren in Klammern gesetzt, ändert sich die Reihenfolge der Operationen.
myQueue.enqueue('a'); myQueue.enqueue('b'); cout << (myQueue.dequeue() << myQueue.dequeue()); // prints "ab"
Hier gruppieren die Klammern die << Operator mit dem ersten Dequeue-Aufruf, wodurch der erste << um das Ergebnis des Dequeue auszuwerten. Dieses Ergebnis wird dann als Argument für den zweiten Aufruf aus der Warteschlange verwendet, gefolgt vom äußeren << Operator.
Dieses Verhalten ist auf die Tatsache zurückzuführen, dass der << Der Operator hat keinen Sequenzpunkt, was bedeutet, dass der Compiler die Auswertungsreihenfolge seiner Argumente optimieren kann. Um eine konsistente Ausgabe sicherzustellen, wird empfohlen, Klammern zu verwenden, um die ausgegebenen Argumente explizit zu gruppieren.
Das obige ist der detaillierte Inhalt vonWie wirken sich Operatorpriorität und Assoziativität auf die Reihenfolge der C-Ausgabeströme aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!