Ordre d'évaluation
Cette section décrit l'ordre dans lequel les expressions sont évaluées mais ne tient pas compte de la syntaxe ou la sémantique des opérateurs dans ces expressions.Les sections précédentes fournissent une référence complète pour chacun de ces opérateurs.
Les expressions sont évaluées en fonction de la priorité et le regroupement de leurs opérateurs.(Priorité des opérateurs et d'associativité dans Conventions lexicales, affiche les relations que les opérateurs C++ appliquent aux expressions.) Considérez cet exemple :
Exemple
// expre_pluslang__pluslang_Order_of_Evaluation.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int a = 2, b = 4, c = 9;
cout << a + b * c << "\n";
cout << a + (b * c) << "\n";
cout << (a + b) * c << "\n";
}
Sortie
38
38
54
Ordre d'évaluation de l'expression
L'ordre dans lequel l'expression affichée dans l'illustration ci-dessus est évaluée est déterminée par la priorité et l'associativité des opérateurs :
La multiplication (*) a la priorité la plus élevée dans cette expression ; par conséquent la sous-expression b * c est évaluée en premier.
L'ajout (+) a la priorité la plus élevée suivante, ce a est ajouté au lieu d' b et d' c.
Le décalage vers la gauche (<<) a la plus faible priorité dans l'expression, mais il existe deux occurrences.Étant donné que l'opérateur de décalage vers la gauche groupes de gauche à droite, la sous-expression gauche d'abord puis est évaluée la correcte.
Lorsque les parenthèses sont utilisées pour grouper les sous-expressions, elles modifient la priorité et la commande dans lesquelles l'expression est évaluée, comme indiqué dans l'illustration suivante.
Ordre d'évaluation de l'expression avec des parenthèses
Les expressions telles qu'elles existent dans l'illustration ci-dessus sont évaluées purement pour leurs effets secondaires - dans ce cas, pour transférer des informations au périphérique de sortie standard.