◐ Shell
clean mode source ↗

Priorité des opérateurs en C++ — cppreference.com

De cppreference.com

Le tableau suivant liste la priorité et l'associativité des opérateurs C++. Les opérateurs sont triés par ordre décroissant de priorité.

Priorité Opérateur Description Associativité
1 :: Résolution de portée Gauche à droite
2 ++   -- Incrémentation et décrementation suffixe/postfixe
() Appel de fonction
[] Accès dans un tableau
. Sélection membre par référence
−> Sélection membre par pointeur
3 ++   -- Incrementation et décrementation préfixe Droite à gauche
+   Plus et moins unaires
!   ~ NON logique et NON binaire
(type) Transtypage
* Indirection (déréférence)
& Adresse
sizeof Taille
new, new[] Allocation dynamique de la mémoire
delete, delete[] Libération dynamique de la mémoire
4 .*   ->* Pointeur vers un membre Gauche à droite
5 *   /   % Multiplication, division et reste
6 +   Addition et soustraction
7 <<   >> Décalage binaire à gauche et à droite
8 <   <= Respectivement pour les opérateurs de comparaison < et ≤
>   >= Respectivement pour les opérateurs de comparaison > et ≥
9 ==   != Respectivement pour les comparaisons = et ≠
10 & ET binaire
11 ^ XOR binaire (ou exclusif)
12 | OU binaire (ou inclusif)
13 && ET logique
14 || OU logique
15 ?: opérateur conditionnel ternaire Droite à gauche
= Affectation directe (fourni par défaut pour les classes C++)
+=   −= Affectation par somme ou différence
*=   /=   %= Affectation par produit, division ou reste
<<=   >>= Affectation par décalage binaire à gauche ou à droite
&=   ^=   |= Affectation par ET, XOR ou OU binaire
16 throw opérateur Throw (pour les exceptions)
17 , Virgule Gauche à droite

Lors de l'analyse d'une expression, un opérateur qui figure sur une lignes sera plus étroitement lié (comme s'il y avait des parenthèses) à ses arguments que tous les autres opérateurs listés dans les lignes en dessous. Par exemple, les expressions std::cout<<a&b et *p++ sont analysées comme (std::cout<<a)&b et *(p++) et non pas comme std::cout<<(a&b) ou (*p)++.

Les opérateurs placés dans la même cellule (il peut y avoir plusieurs lignes d'opérateurs répertoriés dans une cellule) sont évaluées avec le même niveau de priorité, selon le sens de lecture indiqué dans la dernière colonne. Par exemple, l'expression a=b=c est analysée comme a=(b=c) et non pas comme (a=b)=c, en raison de l'associativité de droite à gauche.

La priorité d'un opérateur n'est pas affectée par la surcharge.

Notes

La norme elle-même ne précise pas les niveaux de priorité. Ils sont issus de la grammaire.

Les opérateurs const_cast, static_cast, dynamic_cast, reinterpret_cast et typeid ne sont pas inclus car ils ne sont jamais ambigus.


Certains opérateurs ont des variantes d'écriture (par exemple, and pour &&, or pour ||, not pour !, etc).

Voir aussi

L'ordre d'évaluation des arguments des opérateurs lors de l'exécution.

Opérateurs ordinaires
affectation incrémentation
décrémentation
arithmétique logique comparaison accès aux membre autre

a = b a = rvalue a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b a >>= b

++a --a a++ a--

+a -a a + b a - b a * b a / b a % b ~a a & b a | b a ^ b a << b a >> b

!a a && b a || b

a == b a != b a < b a > b a <= b a >= b

a[b] *a &a a->b a.b a->*b a.*b

a(...) a, b (type) a ? :

Opérateurs spéciaux

static_cast convertit un type dans un autre type compatible

dynamic_cast convertit une classe de base virtuelle dans une classe dérivée

const_cast convertit un type dans un type compatible avec des cv-qualifiers différents

reinterpret_cast convertit un type dans un type incompatibles

new allocation de la mémoire

delete libère de la mémoire

sizeof récupère la taille d'un type

sizeof... récupère la taille d'un paquet de paramètres (depuis C++11)

typeid récupère les informations de type d'un type

noexcept vérifie si une expression peut lancer une exception (depuis C++11)

alignof récupère les conditions d'alignement d'un type (depuis C++11)