6. Wyrażenia i operatory

6.1. Priorytety operatorów

W C++ jest kilkadziesiąt różnych operatorów. Czasem wymagają one podania jednego argumentu, czasem dwóch. Są też takie które wymagają podania 3, lub dowolnej liczby argumentów. Czasem wynikiem ich działania jest wrtość logiczna, czasem wartość dowolnego typu. To co je wszystkie łączy - to hierarchia.

By przy interpretacji wyrażeń z nich zbudowanych nie powstał bałagan - hierarchia jest ściśle zdefiniowana, i podzielona na kilkanaście poziomów. Wszystkie operatory na danym poiomie są równoważne - o kolejności ich wykonania decyduje kolejność pojawiania się w kodzie

Priorytet Ilość arg. Operator Opis Przykład
1 2 :: zakres, przestrzeń nazw std::cout
2 2 () []
. ->
++ --
dynamic_cast
static_cast
reinterpret_cast
const_cast
typeid
nawiasy, inkrementacja postfiksowa (przyrostkowa), odwołanie do metod obiektów, odwołania do pól struktur...

i++,

obiekt->metoda()

3 1 ++ -- ~ !
sizeof
new delete
* & + -

inkrementacja przedrostkowa (prefiksowa), referencja, wskaźnik

++i, +k, -k, & ref, * wsk
4 1 (typ) rzutowanie (double) a
5 2 .* ->*    
6 2 * / % mnożenie, dzielenie, modulo a / b
7 2 + - dodawanie, odejmowanie a + b
8 2 << >> przesunięcie bitów a << 2
9 2 < > <= >= porównywanie a < b
10 2 == != porównywanie a == b
11 2 & bitowy iloczyn  
12 2 ^ różnica symetryczna XOR  
13 2 | bitowa suma  
14 2 && iloczyn logiczny (warunek1) && (warunek2)
15 2 || suma logiczna (warunek1) || (warunek2)
16 3 x ? y : z operator warunkowy – zwraca y, gdy x ma wartość niezerową, z w przeciwnym wypadku  
17 2 = *=
/= %=
+= -=
>>= <<=
&= ^= !=
przypisanie a %= b
18 2 , operator przecinkowy, służący np. do grupowania wyrażeń podczas inicjalizowania pętli for(i = 1, j = 1;;i++,j--)

Od priorytetu operatora zależy, w jakiej kolejności zostaną wykonane operacje z których składa się wyrażenie. W przypadku operatorów o tym samym priorytecie, wyrażenie wykonywane w kolejności albo od lewej do prawej - albo od prawej do lewej, w zależności od tego z której strony jest wiązanie danego operatora.

W przypadku, gdybyście mieli wątpliwości odn. kolejności wykonania operacji – celowo jeden z najwyższych priorytetów ma operator nawiasów ().