Výraz je konstrukce předepisující výpočet hodnoty. Je tvořen operandy a operátory. Operand je proměnná, zápis funkce nebo složitější konstrukce mající opět hodnotu (tedy zase výraz). Operátory určují, co provést s hodnotami operandů. Jazyk C++ nabízí celou řadu unárních a binárních operátorů a jeden operátor ternární (operátory s jedním, dvěma a třemi operandy). Unární operátory jsou zpravidla prefixové (zapisují se před operand) nebo postfixové (píší se za operand). Binární operátory jsou nejčastěji infixové (píší se mezi operandy).
PINK (2 dělení) podle počtu operandů a++ (1 operand) unární a+b (2 operandy) binární ternární podle funkce aritmetické porovnávací logické inkrementace, dekrementace přiřazovací a++ ++a a*=5+c vezme jako a*=(5+c)
Operátor určuje operaci, která se má s operandem nebo operandy provést. Mohou být unární (1 operand) nebo binární (2 operandy).
Unární operátory:
Syntax:
podmínka ? podmínka_splněna : podmínka_nesplněna
Význam v zápisu
E1 ? E2 : E3
se operand E1 automaticky konvertuje na typ bool. Je-li hodnota E1 rovna true, je výsledkem E2, jinak je výsledkem E3. V případě tohoto operátoru C++ zaručuje, že se jako první vyhodnotí operand E1 a teprve pak E2 nebo E3
(vždy jen jeden z nich).
Pro typ výsledku platí:
Poznámka:
Tento operátor se nepovažuje za jediný symbol, můžeme ho rozdělit bílými znaky.
určuje pořadí zpracování největší - závorka nejmenší - čárka neučit se tabulku prioritu tabulka MAK sem
Prioritu označíme čísly od 1 (nejvyšší) do 16 (nejnižší). Dříve se vyhodnocují pochopitelné operátory s vyšší prioritou, pořadí ale můžeme upravit kulatými závorkami. Asociativita určuje, zda se zřetězené operátory vyhodnocují v pořadí zprava doleva nebo zleva doprava. Napříkal operátor sčítání + je asociativní zleva doprava, a to znamená, že výraz:
a + b + c
se vyhodnotí jako
(a + b) + c
Jak jistě víte, jsou situace, kdy pro sčítání na počítači neplatí asociativní zákon, a proto je důležité vědět, jak zpracování takovéhoto výrazu proběhne. Některé operátory, například přiřazovací, jsou asociativní zprava doleva. Výraz:
a = b = 3.1;
se vyhodnotí jako
a = (b = 3.1);
Proměnné a se přiřadí výsledek operace b = 3.1, tedy hodnota uložená v b.
Pozor: C++ sice předepisuje, v jakém pořadí se vyhodnotí operace, ale nestanoví pořadí, ve kterém se připraví operandy. Jestliže napíšeme
f() + g() + h()
máme sice zaručeno, že se hodnoty, vrácené těmito funkcemi, sečtou v pořadí
(f() + g()) + h()
ale to neznamená, že se funkce f(), g() a h() budou také v tomto pořadí volat. Jestliže to bude překladač pokládat za vhodné (třeba kvůli optimalizaci), může nejprve zavolat funkci g(). výsledek si uložit, pak zavolat třeba h(), výsledek si opět uložit, a nakonec zavolat f (). Tyto dílčí výsledky ovšem musí sečíst v pořadí určeném asociativitou použitých operátorů.
V následující tabulce P znamená prioritu, A asociativitu, je v C říká, zda lze tento operátor používat i v jazyce C, a sloupec l-hodnota říká, zda daný operátor vytváří l-hodnotu.
Operátory, které se skládají z více znaků, nesmíme při zápisu rozdělit, tj. mezi jednotlivé znaky tvořící operátor nesmíme vložit bílé znaky. Výjimkou jsou operátory (), [] a :?.