Maison >développement back-end >C++ >Comment la priorité et l'associativité des opérateurs affectent-elles l'ordre du flux de sortie C ?
Précédence et associativité des opérateurs dans les flux de sortie
En C , le comportement de l'opérateur du flux de sortie (<<) peut être contre-intuitif lorsque plusieurs arguments sont fournis. Bien qu'il puisse sembler que les arguments sont traités de gauche à droite, ce n'est pas toujours le cas.
Comme illustré dans les extraits de code ci-dessous, l'ordre de sortie peut différer en fonction de l'emplacement du << opérateur et le nombre d'arguments fournis.
myQueue.enqueue('a'); myQueue.enqueue('b'); cout << myQueue.dequeue() << myQueue.dequeue(); // prints "ba"
Dans ce cas, le premier << L'opérateur est en dehors des parenthèses, donc le premier appel retiré de la file d'attente est évalué en premier. Ce résultat est ensuite utilisé comme argument pour le deuxième << opérateur.
Cependant, si l'opérateur << les opérateurs sont placés entre parenthèses, l'ordre des opérations change.
myQueue.enqueue('a'); myQueue.enqueue('b'); cout << (myQueue.dequeue() << myQueue.dequeue()); // prints "ab"
Ici, les parenthèses regroupent les opérateurs << opérateur avec le premier appel retiré de la file d'attente, provoquant le premier << pour évaluer le résultat du retrait de la file d'attente. Ce résultat est ensuite utilisé comme argument pour le deuxième appel de sortie de file d'attente, suivi du <<
Ce comportement est dû au fait que l'opérateur << L'opérateur n'a pas de point de séquence, ce qui signifie que le compilateur est autorisé à optimiser l'ordre d'évaluation de ses arguments. Pour garantir une sortie cohérente, il est recommandé d'utiliser des parenthèses pour regrouper explicitement les arguments en cours d'impression.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!