La precedenza tra operatori indica l'ordine con cui gli operatori vengono valutati dal compilatore. Un operatore con precedenza maggiore verrà valutato per prima rispetto ad un operatore con precedenza minore, anche se quest'ultimo figura prima dell'operatore con precedenza maggiore. Ecco un esempio:
int risultato = 4 + 5 * 7 + 3;
Il risultato in questo caso dipende proprio dalla precedenza tra operatori. In C++, l'operatore di moltiplicazione (*
) ha precedenza rispetto all'operatore addizione (+
). Quindi la moltiplicazione 5*7
avverrà prima di tutte le altre addizioni. Ecco la sequenza della risoluzione dell'espressione precendente:
int risultato = 4 + 5 * 7 + 3;
risultato = 4 + 35 + 3 = 42
Perché le operazioni siano effettuate con ordine diverso, sarà sufficiente introdurre delle parentesi tonde. Ad esempio se vogliamo moltiplicare la somma 4+5
con la somma di 7+3
, basterà scrivere:
int risultato = (4 + 5) * (7 + 3);
La variabile risultato
, in questo caso, varrà 90.
Facciamo ora un elenco di tutti gli operatori ordinati per livello di precedenza. Ad ogni riga della tabella è assegnato un livello di precendenza. L'operatore a maggior priorità avrà il valore 1 e a seguire quelli a priorità sempre più bassa
Livello di precedenza | Operatore | Nome |
---|---|---|
1 | ! |
Not, negazione |
2 | * |
Moltiplicazione |
2 | / |
Divisione |
2 | % |
Modulo |
3 | + |
Addizione |
3 | - |
Sottrazione |
4 | < |
Minore |
4 | <= |
Minore uguale |
4 | > |
Maggiore |
4 | >= |
Maggiore uguale |
5 | == |
Uguale (confronto) |
5 | != |
Diverso |
6 | && |
AND |
7 | || |
OR |
8 | = |
Assegnamento |
Le parentesi risolvono praticamente il problema di conoscere la precedenza tra gli operatori. Per evitare errori ed aumentare la leggibilità del codice può essere consigliabile l'uso delle parentesi in ogni situazione in cui vi sia la presenza contemporanea di più operatori e si abbiano dubbi sulle precedenze.