Operatori, precedenza e associatività predefiniti C++

Il linguaggio C++ include tutti gli operatori C e ne aggiunge molti nuovi. Gli operatori specificano una valutazione da eseguire su uno o più operandi.

Precedenza e associatività

La precedenza dell'operatore specifica l'ordine delle operazioni nelle espressioni che contengono più di un operatore. L'associatività dell'operatore specifica se, in un'espressione che contiene più operatori con la stessa precedenza, un operando viene raggruppato con quello a sinistra o quello a destra.

Ortografia alternativa

C++ specifica ortografiche alternative per alcuni operatori. In C, le ortografie alternative vengono fornite come macro nell'intestazione <iso646.h> . In C++, queste alternative sono parole chiave e l'uso di <iso646.h> o c++ equivalente <ciso646 è> deprecato. In Microsoft C++, l'opzione del /permissive- compilatore o /Za è necessaria per abilitare le ortografie alternative.

Tabella di precedenza e associatività dell'operatore C++

La tabella seguente illustra la precedenza e l'associatività degli operatori C++ (dalla precedenza più alta a quella più bassa). Gli operatori con lo stesso numero di precedenza hanno precedenza uguale, a meno che non venga imposta in modo esplicito con parentesi un'altra relazione.

Descrizione dell'operatore Operatore Alternativa
Precedenza del gruppo 1, nessuna associatività
Risoluzione dell'ambito ::
Precedenza del gruppo 2, da sinistra a destra associativa
Selezione dei membri (oggetto o puntatore) . oppure ->
Indice di matrice []
Chiamata di funzione ()
Incremento del prefisso ++
Decremento suffisso --
Nome tipo typeid
Conversione del tipo costante const_cast
Conversione dinamica dei tipi dynamic_cast
Conversione del tipo reinterpretato reinterpret_cast
Conversione di tipi statici static_cast
Precedenza del gruppo 3, da destra a sinistra associativa
Dimensioni dell'oggetto o del tipo sizeof
Incremento del prefisso ++
Decremento prefisso --
Complemento di uno ~ compl
Non logico ! not
Negazione unaria -
Unario più +
Indirizzo-of &
Riferimento indiretto *
Crea oggetto new
Elimina oggetto delete
Cast ()
Precedenza del gruppo 4, da sinistra a destra associativa
Puntatore a membro (oggetti o puntatori) .* oppure ->*
Precedenza gruppo 5, da sinistra a destra associatività
Moltiplicazione *
Divisione /
Modulo %
Precedenza del gruppo 6, da sinistra a destra associativa
Addizione +
Sottrazione -
Precedenza del gruppo 7, da sinistra a destra associatività
Spostamento a sinistra <<
Spostamento a destra >>
Precedenza del gruppo 8, da sinistra a destra associatività
Minore di <
Maggiore di >
Minore o uguale a <=
Maggiore o uguale a >=
Precedenza gruppo 9, da sinistra a destra associatività
Uguaglianza ==
Disuguaglianza != not_eq
Precedenza del gruppo 10 da sinistra a destra associatività
AND bit per bit & bitand
Precedenza gruppo 11, da sinistra a destra associatività
OR esclusivo bit per bit ^ xor
Precedenza del gruppo 12, da sinistra a destra
OR inclusivo bit per bit | bitor
Precedenza del gruppo 13, da sinistra a destra
AND logico && and
Precedenza del gruppo 14, da sinistra a destra
OR logico || or
Precedenza del gruppo 15, da destra a sinistra
Condizionale ? :
Assegnazione =
Assegnazione di moltiplicazione *=
Assegnazione divisione /=
Assegnazione modulo %=
Assegnazione di addizione +=
Assegnazione di sottrazione -=
Assegnazione di spostamento a sinistra <<=
Assegnazione di spostamento a destra >>=
Assegnazione AND bit per bit &= and_eq
Assegnazione OR inclusiva bit per bit |= or_eq
Assegnazione OR esclusivo bit per bit ^= xor_eq
espressione throw throw
Precedenza del gruppo 16, da sinistra a destra
Comma ,

Vedi anche

Overload degli operatori