Prioritatea operațiunii

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 21 martie 2017; verificările necesită 3 modificări .

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

Practica operațiunilor de clasare

În C++

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.