Priorita , hodnost nebo seniorita operace nebo operátora je formální vlastnost operátora/operace, která ovlivňuje pořadí jejího provádění ve výrazu s několika různými operátory bez výslovného (pomocí hranatých závorek) označení pořadí, ve kterém se provádí. jsou hodnoceny. Například operace násobení má obvykle vyšší prioritu než operace sčítání, takže výraz nejprve obdrží součin a a poté součet.
Operace mohou mít stejnou prioritu, v takovém případě jsou vyhodnoceny podle pravidla asociativity stanoveného pro tyto operace.
Ve formálních systémech existují dva způsoby, jak nastavit prioritu libovolného operátoru. První je rozdělení všech operátorů podle hierarchie priorit. Tato metoda se vždy používá k nastavení výchozích priorit a je pevně stanovena v popisu jazyka ve formě dohody, že těm a těm operátorům jsou přiděleny takové a takové priority. Nedostává žádný odraz v syntaxi jazyka, to znamená, že nepoužívá žádné explicitní prostředky (= ty / jiné symboly) k označení priority operace.
Druhá metoda umožňuje změnit výchozí priority jejich explicitním určením pomocí párových závorek. Hloubka vnoření je přitom přímo úměrná hodnotě priority, to znamená, že více vnitřních závorek označuje vyšší prioritu než ty vnější, které je rámují. V předchozím příkladu se součtem a součinem lze pořadí výpočtu změnit pomocí závorek a celý výraz zapsat takto: nebo takto: .
Přednost operací je pořadí, ve kterém jsou operace prováděny ve výrazu, za předpokladu, že ve výrazu není explicitně uvedeno pořadí, ve kterém jsou operace prováděny (pomocí závorek).
Pokud mají operace stejnou prioritu, pak je pořadí provádění takových operací určeno podle vlastnosti asociativnosti.
Asociativita je směr provádění operací, pokud mají operace stejnou prioritu:
Priorita | Úkon | Asociativnost | Popis |
---|---|---|---|
jeden | :: | zleva doprava | operace rozlišení unárního rozsahu |
[ ] | operace indexování | ||
() | kulaté závorky | ||
. | přístup k členu struktury nebo třídy | ||
-> | přístup k členu struktury nebo třídy prostřednictvím ukazatele | ||
2 | ++ | zleva doprava | postfixový přírůstek |
— | postfixový dekrement | ||
3 | ++ | zprava doleva | přírůstek předpony |
— | předpona dekrementace | ||
čtyři | * | zleva doprava | násobení |
/ | divize | ||
% | zbytek divize | ||
5 | + | zleva doprava | přidání |
— | odčítání | ||
6 | >> | zleva doprava | pravý posun |
<< | posun doleva | ||
7 | < | zleva doprava | méně |
<= | menší nebo rovno | ||
> | více | ||
>= | větší nebo rovno | ||
osm | == | zleva doprava | rovná se |
!= | ne rovné | ||
9 | && | zleva doprava | logické AND |
deset | || | zleva doprava | logické NEBO |
jedenáct | ?: | zprava doleva | podmíněná operace (ternární operace) |
12 | = | zprava doleva | úkol |
*= | násobení s přiřazením | ||
/= | rozdělení se zadáním | ||
%= | zbytek dělení se zadáním | ||
+= | doplnění se zadáním | ||
-= | odčítání s přiřazením | ||
13 | , | zleva doprava | čárka |
V případě pochybností je třeba použít závorky. V některých případech může mít priorita operátorů implicitní účinky. Zvažte příklad:
int n = 5 ; cout << n += 3 ;Navzdory samozřejmosti kódu pro člověka kompilátor vygeneruje chybu: ve výrazu na řádku 2 se nejprve provede operátor bitového posunu (<<). její priorita je 6 a je vyšší než priorita operátoru sčítání-přiřazení (+=) 12. V důsledku toho bude hodnota proměnné n předána proudu cout a operace += nebude provedeno.