Sdílet prostřednictvím


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í hodnocení ve 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ů:

  1. Násobení (*) má v tomto výrazu nejvyšší prioritu, proto je podvýraz b * c vyhodnocen jako první.

  2. 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.

  3. 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

Pořadí vyhodnocení výrazu v závorkách

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í.

Viz také

Referenční dokumentace

Sémantika výrazů