Pořadí vyhodnocení
Tato část popisuje pořadí, ve kterém jsou výrazy vyhodnocovány, ale nevysvětluje syntaxi a sémantiku operátorů v těchto výrazech.Předchozí části poskytují úplnou referenci pro každý z těchto operátorů.
Výrazy jsou vyhodnocovány podle priority a seskupení jejich operátorů. (Další informace o vztazích operátorů jazyka C++ týkající se výrazů naleznete v části Přednost a asociativita operátorů v tématu Lexikální konvence.) Vezměme si jako příklad:
Příklad
// 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";
}
Výsledek
38
38
54
Pořadí vyhodnocení výrazu
Pořadí, ve kterém je výraz podle výše uvedeného obrázku vyhodnocen se stanoví pomocí přednosti a asociativity operátorů:
Násobení (*) má v tomto výrazu nejvyšší prioritu, proto je podvýraz b * c vyhodnocen jako první.
Sčítání (+) má další nejvyšší prioritu, takže hodnota proměnné a je přičtena k výsledku operace s proměnnými b a c.
Levý posun (<<) má ve výrazu nejnižší prioritu, ale existují dva výskyty.Vzhledem k tomu, že operátor levého posunu seskupuje zleva doprava, je levý podvýraz vyhodnocen jako první a poté je vyhodnocen pravý podvýraz.
Použití závorek k seskupení podvýrazů mění prioritu a také pořadí, ve kterém je výraz vyhodnocen, jak je znázorněno na následujícím obrázku.
Pořadí vyhodnocení výrazu se závorkami
Výrazy jako například na výše uvedeném obrázku jsou vyhodnoceny výhradně pro jejich vedlejší účinky, v tomto případě pro přenos informací na standardní výstup zařízení.