Tableau des opérateurs

 opérateur
 priorité   associativité    signification   utilisation
::
::
17

D-G
portée global (unaire)
résolution de portée (binaire)
::identificateur
classe::membre
.
->
[]
()
()
sizeof
sizeof
16
D-G
D-G
D-G
D-G
D-G

 

sélection d'un membre
sélection d'un membre
indexation
appel de fonction
construction de valeur (= conversion)
taille d'un objet
taille d'un type
objet.membre
pointeur->membre
pointeur [expression]
expr (liste_d_expr)
type (liste_d_expr)
sizeof expr
sizeof (type)
++
++
--
--
~
!
-
+
&
*
new
new[]
delete
delete[]
()
15
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
post-incrémentation
pré-incrémentation
post-décrémentation
pré-decrémentation
complément
not
moins unaire
plus unaire
adresse de
déréférence
création (allocation)
création d'un tableau
destruction (désallocation)
destruction de tableau
transtypage (cast)
lvalue++
++lvalue
lvalue--
--lvalue
~expr
!expr
-expr
+expr
&expr
*expr
new type
new type [expr]
delete pointeur
delete [pointeur]
(type) expr
.*
->*
14
D-G
D-G
sélection d'un membre
selection d'un membre
objet.pointeur_sur_membre
pointeur->pointeur_sur_membre
*
/
%
13
D-G
D-G
D-G
multiplication
division
modulo (reste)
expr * expr
expr / expr
expr % expr
+
-
12
D-G
D-G
addition
soustraction
expr + expr
expr - expr
<<
>>
11
D-G
D-G
décalage à gauche
décalage à droite
expr << expr
expr >> expr
<
<=
>
>=
10
D-G
D-G
D-G
D-G
inférieur
inférieur ou égal
supérieur
supérieur ou égal
expr < expr
expr <= expr
expr > expr
expr >= expr
==
!=
9
D-G
D-G
égal
non égal
expr == expr
expr != expr
&
8
D-G
AND bit à bit expr & expr
^
7
D-G
XOR bit à bit expr ^ expr
|
6
D-G
OR bit à bit expr | expr
&&
5
D-G
ET ALORS expr && expr
||
4
D-G
OU SINON expr || expr
?:
3
D-G
expression conditionnelle expr ? expr : expr
=
*=
/=
%=
+=
-=
<<=
>>=
&=
!=
^=
2
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
G-D
affectation simple
multiplication et affectation
division et affectation
modulo et affectation
addition et affectation
soustraction et affectation
décalage à gauche et affectation
décalage à droite et affectation
AND et affectation
OR et affectation
XOR et affectation
lvalue = expr
lvalue *= expr
lvalue /= expr
lvalue %= expr
lvalue += expr
lvalue -= expr
lvalue <<= expr
lvalue >>= expr
lvalue &= expr
lvalue != expr
lvalue ^= expr
,
1
D-G
séquencement d'instructions expr, expr

Associativité : exemples

D-G
CObjet::CClasse::CSousClasse::m_Membre
 ((CObjet::CClasse)::CSousClasse)::m_Membre)
D-G
A.B->C.D
(((A.B)->C).D)
D-G
X * Y % Z / T
(((X * Y) % Z) / T)
D-G
i + j - k + l
(((i + j) - k) + l)
D-G
o >> p >> q << r
(((o >> p) >> q) << r)
D-G
E1, E2, E3, E4
(((E1, E2), E3), E4)

 
G-D
*p++
(*(p++))
G-D
***E
(*(*(*E)))
G-D
A += B *= C -= D
(A += (B *= (C -= D)))
G-D
A = B = C = D
(A = (B = (C = D)))

Opérateurs équivalents

    Plusieurs opérateurs ci-dessus peuvent être remplacés par des tokens alphabétique :
 
bitand    &
compl    ~
 or       ||
or_eq     |=
bitor     |
xor     ^
and_eq    &=
not_eq    !=
not       !
and     &&
xor_eq    ^=
 

Conversions

    Il est fréquent que les opérantes n'aient pas exactement le type (voir par exemple les constantes entières et leur type), nécessité par les opérateurs (voir en particulier les conversions arithmétiques usuelles. Ils doivent donc être transformés implicitement (à l'initiative du compilateur) ou explicitement (à l'initiative du programmeur). Il y a de nombreuses sortes de transformations :