Expressions (C++)
Remonter à Expressions - Index
Une expression est une séquence d'opérateurs, d'opérandes et de séparateurs qui spécifie un calcul. La syntaxe formelle, listée dans Expressions C++Builder, indique que les expressions sont définies de manière récursive : des sous-expressions peuvent être imbriquées, sans qu'il y ait de limite à cette pratique. Toutefois, le compilateur renvoie un message d'erreur s'il ne parvient pas à compiler une expression trop complexe.
Remarque : "Expressions C++Builder" montre comment sont combinés les identificateurs et les opérateurs pour former des "phrases" grammaticalement légales.
Les expressions sont évaluées selon certaines règles de conversion, de groupement, d'associativité et de priorité, qui dépendent des opérateurs utilisés, de la présence de parenthèses, et des types de données des opérandes. Les conversions standard sont détaillées dans Méthodes utilisées dans les conversions arithmétiques standard. La manière dont sont groupés les opérandes et les sous-expressions n'indique pas nécessairement l'ordre réel dans lequel ils seront évalués par le compilateur (voir Ordre d'évaluation).
Les expressions peuvent fournir une lvalue, une rvalue, ou pas de valeur. Elles ont éventuellement des effets de bord selon qu'elles fournissent, ou non, un résultat.
La priorité et l'associativité des opérateurs sont résumées dans Associativité et priorité des opérateurs C++Builder. La grammaire, dans Expressions C++Builder, définit de manière complète la priorité et l'associativité des opérateurs.
Expressions C++Builder
primary-expression:
literal
this (C++ specific)
:: identifier (C++ specific)
:: operator-function-name (C++ specific)
:: qualified-name (C++ specific)
(expression)
name
literal:
integer-constant
character-constant
floating-constant
string-literal
name:
identifier
operator-function-name (C++ specific)
conversion-function-name (C++ specific)
~ class-name (C++ specific)
qualified-name (C++ specific)
qualified-name: (C++ specific)
qualified-class-name :: name
postfix-expression:
primary-expression
postfix-expression [ expression ]
postfix-expression (<expression-list>)
simple-type-name (<expression-list>) (C++ specific)
postfix-expression . name
postfix-expression -> name
postfix-expression ++
postfix-expression --
const_cast < type-id > ( expression ) (C++ specific)
dynamic_cast < type-id > ( expression ) (C++ specific)
reinterpret_cast < type-id > ( expression ) (C++ specific)
static_cast < type-id > ( expression ) (C++ specific)
typeid ( expression ) (C++ specific)
typeid ( type-name ) (C++ specific)
expression-list:
assignment-expression
expression-list , assignment-expression
unary-expression:
postfix-expression
++ unary-expression
- - unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
allocation-expression (C++ specific)
deallocation-expression (C++ specific)
unary-operator: one of & * + - !
allocation-expression: (C++ specific)
<::> new <placement> new-type-name <initializer>
<::> new <placement> (type-name) <initializer>
placement: (C++ specific)
(expression-list)
new-type-name: (C++ specific)
type-specifiers <new-declarator>
new-declarator: (C++ specific)
ptr-operator <new-declarator>
new-declarator [<expression>]
deallocation-expression: (C++ specific)
<::> delete cast-expression
<::> delete [] cast-expression
cast-expression:
unary-expression
( type-name ) cast-expression
pm-expression:
cast-expression
pm-expression .* cast-expression (C++ specific)
pm-expression ->* cast-expression (C++ specific)
multiplicative-expression:
pm-expression
multiplicative-expression * pm-expression
multiplicative-expression / pm-expression
multiplicative-expression % pm-expression
additive-expression:
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression - multiplicative-expression
shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
relational-expression:
shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression >= shift-expressionequality-expression:
relational-expression
equality expression == relational-expression
equality expression != relational-expression
AND-expression:
equality-expression
AND-expression & equality-expression
exclusive-OR-expression:
AND-expression
exclusive-OR-expression ^ AND-expression
inclusive-OR-expression:
exclusive-OR-expression
inclusive-OR-expression | exclusive-OR-expression
logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression
logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
assignment-operator:
one of =, *=, /=, %=, +=, -= <<, =>, >=, &=, ^=, |=
expression:
assignment-expression
expression , assignment-expression
constant-expression:
conditional-expression