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