Expressions (C++)

De RAD Studio
Aller à : navigation, rechercher

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