Prioritatea , rangul sau vechimea unei operațiuni sau operator este o proprietate formală a unui operator/operație care afectează ordinea executării acesteia într-o expresie cu mai mulți operatori diferiți în absența unei indicații explicite (folosind paranteze) a ordinii în care aceștia sunt evaluate. De exemplu, operației de înmulțire i se acordă de obicei o prioritate mai mare decât operației de adunare, astfel încât expresia va primi mai întâi produsul și , iar apoi suma.
Operatiile pot avea aceeasi prioritate, caz in care sunt evaluate conform regulii de asociativitate stabilita pentru aceste operatii.
În sistemele formale , există două moduri de a seta prioritatea oricărui operator. Prima este repartizarea tuturor operatorilor în funcție de ierarhia priorităților. Această metodă este întotdeauna utilizată pentru a seta priorități implicite și este stabilită în descrierea limbii sub forma unui acord prin care unor astfel de operatori li se atribuie astfel de priorități. Nu primește nicio reflectare în sintaxa limbajului, adică nu folosește niciun mijloc explicit (= acele / alte simboluri) pentru a indica prioritatea operației.
A doua metodă face posibilă modificarea priorităților implicite prin specificarea explicită a acestora folosind caractere paranteze pereche. În același timp, adâncimea de cuib este direct proporțională cu valoarea priorității, adică mai multe paranteze interioare indică o prioritate mai mare decât cele exterioare care le încadrează. În exemplul anterior cu suma și produsul, ordinea calculului poate fi schimbată folosind paranteze, scriind întreaga expresie astfel: sau așa: .
Precedența operațiilor este ordinea în care operațiile sunt efectuate în expresie, cu condiția să nu existe o indicație explicită a ordinii în care sunt efectuate operațiunile în expresie (folosind paranteze).
Dacă operațiunile au aceeași prioritate, atunci ordinea de execuție a acestor operații este determinată în funcție de proprietatea asociativității.
Asociativitatea este direcția de execuție a operațiilor dacă operațiunile au aceeași prioritate:
O prioritate | Operațiune | Asociativitatea | Descriere |
---|---|---|---|
unu | :: | de la stanga la dreapta | operațiune de rezoluție unică |
[ ] | operatie de indexare | ||
() | paranteze rotunde | ||
. | accesarea unui membru al unei structuri sau clase | ||
-> | accesarea unui membru al unei structuri sau clase printr-un pointer | ||
2 | ++ | de la stanga la dreapta | increment postfix |
— | decrement postfix | ||
3 | ++ | de la dreapta la stânga | increment de prefix |
— | decrementarea prefixului | ||
patru | * | de la stanga la dreapta | multiplicare |
/ | Divizia | ||
% | restul diviziei | ||
5 | + | de la stanga la dreapta | plus |
— | scădere | ||
6 | >> | de la stanga la dreapta | schimbare la dreapta |
<< | schimba la stânga | ||
7 | < | de la stanga la dreapta | Mai puțin |
<= | mai mic sau egal | ||
> | Mai mult | ||
>= | mai mare sau egal | ||
opt | == | de la stanga la dreapta | egală |
!= | nu este egal | ||
9 | && | de la stanga la dreapta | ŞI logic |
zece | || | de la stanga la dreapta | SAU logic |
unsprezece | ?: | de la dreapta la stânga | operație condiționată (operație ternară) |
12 | = | de la dreapta la stânga | misiune |
*= | înmulțire cu atribuire | ||
/= | împărțire cu sarcină | ||
%= | restul diviziei cu misiunea | ||
+= | adaos cu atribuire | ||
-= | scădere cu atribuire | ||
13 | , | de la stanga la dreapta | virgulă |
Când aveți îndoieli, trebuie folosite paranteze. În unele cazuri, prioritatea operatorului poate avea efecte implicite. Luați în considerare un exemplu:
int n = 5 ; cout << n += 3 ;În ciuda caracterului evident al codului pentru un om, compilatorul va genera o eroare: în expresia de pe linia 2, operatorul de deplasare pe biți (<<) va fi executat primul. precedența sa este 6 și este mai mare decât precedența operatorului de adăugare-atribuire (+=) 12. Ca urmare, valoarea variabilei n va fi transmisă fluxului cout, iar operația += nu va fi efectuat.