Espaces de noms
Variantes
Affichages
Actions

Order of evaluation

De cppreference.com
< cpp‎ | language

 
 
Langage C++
Sujets généraux
Contrôle de flux
Instructions conditionnelles
Instructions d'itération
Instructions de saut
Fonctions
déclaration de fonction
expression lambda
fonction générique
spécificateur inline
spécification d'exception (obsolète)
spécificateur noexcept (C++11)
Exceptions
Espaces de noms
Types
spécificateur decltype (C++11)
Qualificatifs
qualificatifs const et volatile
qualificatifs de stockage
qualificatif constexpr (C++11)
qualificatif auto (C++11)
qualificatif alignas (C++11)
Initialisation
Littéraux
Expressions
catégories de valeurs
ordre d'évaluation
opérateurs alternatifs
Utilitaires
Types
déclaration typedef
déclaration d'alias de type (C++11)
attributs (C++11)
Jette
Original:
Casts
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
conversions implicites
conversion const_cast
conversion static_cast
conversion dynamic_cast
conversion reinterpret_cast
conversions style C et style fonction
Allocation de mémoire
Classes
Qualificatifs spécifiques aux membres de classe
Fonctions membres spéciales
Modèles
classes génériques
fonctions génériques
spécialisation de modèles
paquets de paramètres (C++11)
Divers
Assembleur
 
Ordre d'évaluation des opérandes de tout opérateur C + +, y compris l'ordre d'évaluation des arguments de la fonction dans une expression d'appel de fonction, et l'ordre d'évaluation des sous-expressions dans n'importe quelle expression n'est pas spécifié (sauf indication contraire ci-dessous). Le compilateur de les évaluer dans n'importe quel ordre, et peut choisir un autre ordre où la même expression est évaluée à nouveau .
Original:
Order of evaluation of the operands of any C++ operator, including the order of evaluation of function arguments in a function-call expression, and the order of evaluation of the subexpressions within any expression is unspecified (except where noted below). The compiler will evaluate them in any order, and may choose another order when the same expression is evaluated again.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Il n'y a pas de notion de gauche à droite ou de droite à gauche évaluation en C + +, ce qui ne doit pas être confondu avec de gauche à droite et de droite à gauche associativité des opérateurs: la a + b + c expression est analysée comme (a + b) + c raison à gauche à droite associativité de + opérateur, mais la sous-expression c peut être évaluée en premier (ou dernier, ou en même temps que a ou b) lors de l'exécution .
Original:
There is no concept of left-to-right or right-to-left evaluation in C++, which is not to be confused with left-to-right and right-to-left associativity of operators: the expression a + b + c is parsed as (a + b) + c due to left-to-right associativity of operator+, but the subexpression c may be evaluated first (or last, or at the same time as a or b) at run time.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Sommaire

[modifier] Séquencé avant-rulesNJ

[modifier] Définitions

[modifier] Évaluations

Il existe deux types d'évaluations effectuées par le compilateur pour chaque expression ou sous-expression (qui sont tous deux en option):
Original:
There are two kinds of evaluations performed by the compiler for each expression or subexpression (both of which are optional):
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • ' Calcul de la valeur: le calcul de la valeur qui est retournée par l'expression. Cela peut impliquer la détermination de l'identité de l'objet (glvalue évaluation, par exemple, si l'expression renvoie une référence à un objet) ou lire la valeur précédemment affectée à un objet (évaluation prvalue, par exemple, si l'expression retourne un nombre, ou une autre valeur )
    Original:
    value computation: calculation of the value that is returned by the expression. This may involve determination of the identity of the object (glvalue evaluation, e.g. if the expression returns a reference to some object) or reading the value previously assigned to an object (prvalue evaluation, e.g. if the expression returns a number, or some other value)
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • ' Effet secondaire: l'accès (lecture ou écriture) à un objet désigné par un volatile glvalue, la modification (par écrit) à un objet, l'appel d'une bibliothèque de fonction I / O, ou en appelant une fonction qui effectue l'une de ces opérations .
    Original:
    side effect: access (read or write) to an object designated by a volatile glvalue, modification (writing) to an object, calling a library I/O function, or calling a function that does any of those operations.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

[modifier] De la commande

«Ordonnée avant» est asymétrique, transitive, par paires relation entre les évaluations dans le même thread (il peut s'étendre à travers les discussions, si les types atomiques sont impliqués dans std::memory_order approprié) .
Original:
"sequenced-before" is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread (it may extend across threads if atomic types are involved with suitable std::memory_order).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • Si A est séquencé avant B, puis évaluation de A sera terminée avant l'évaluation du B commence .
    Original:
    If A is sequenced before B, then evaluation of A will be complete before evaluation of B begins.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si A n'est pas séquencé avant B et B est séquencé avant A, puis l'évaluation de B sera terminée avant l'évaluation de A commence .
    Original:
    If A is not sequenced before B and B is sequenced before A, then evaluation of B will be complete before evaluation of A begins.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Si A n'est pas séquencé avant B et B n'est pas séquencé avant A, alors deux possibilités existent:
    Original:
    If A is not sequenced before B and B is not sequenced before A, then two possibilities exist:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • * Évaluations de A et B sont non séquencée: ils peuvent être réalisés dans n'importe quel ordre et peuvent se chevaucher (au sein d'un seul thread d'exécution, le compilateur peut imbriquer les instructions CPU qui composent A et B)
    Original:
    * evaluations of A and B are unsequenced: they may be performed in any order and may overlap (within a single thread of execution, the compiler may interleave the CPU instructions that comprise A and B)
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • * Évaluations de A et B sont indeterminably-séquence: ils peuvent être réalisés dans n'importe quel ordre, mais peut se chevauchent pas: soit A sera terminée avant B, ou B sera terminée avant A. L'ordonnance peut être l'inverse la prochaine fois que la même expression est évaluée .
    Original:
    * evaluations of A and B are indeterminably-sequenced: they may be performed in any order but may not overlap: either A will be complete before B, or B will be complete before A. The order may be the opposite the next time the same expression is evaluated.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

[modifier] Règles

1)
Chaque calcul de valeur et effets secondaires d'une pleine expression (une expression qui ne fait pas partie d'une autre expression, typiquement celle qui se termine par un point-virgule) est séquencé avant chaque calcul de la valeur et des effets secondaires de l'expression suivante complet .
Original:
Each value computation and side effect of a full expression (an expression that is not part of another expression, typically one that ends with a semicolon) is sequenced before each value computation and side effect of the next full expression.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
2)
Les calculs de valeur (mais pas les effets secondaires) des opérandes à tout opérateur sont séquencés avant le calcul de la valeur du résultat de l'opérateur (mais pas ses effets secondaires) .
Original:
The value computations (but not the side-effects) of the operands to any operator are sequenced before the value computation of the result of the operator (but not its side-effects).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
3)
Lorsque vous appelez une fonction (si la fonction est en ligne, et si oui ou non explicite la syntaxe d'appel de fonction est utilisé), chaque calcul de la valeur et des effets secondaires associés à une expression argument, ou avec l'expression postfix désignant la fonction appelée, est séquencé avant l'exécution de toute expression ou déclaration dans le corps de la fonction appelée .
Original:
When calling a function (whether or not the function is inline, and whether or not explicit function call syntax is used), every value computation and side effect associated with any argument expression, or with the postfix expression designating the called function, is sequenced before execution of every expression or statement in the body of the called function.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
4)
Le calcul de la valeur des opérateurs postincrement et Post-décrémentation intégrés est séquencé avant son effet secondaire .
Original:
The value computation of the built-in postincrement and postdecrement operators is sequenced before its side-effect.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
5)
L'effet secondaire de l'intégré pré-incrémentation et opérateurs prédécrémentation est séquencé avant son calcul de la valeur (règle implicite en raison de la définition que l'affectation composé)
Original:
The side effect of the built-in preincrement and predecrement operators is sequenced before its value computation (implicit rule due to definition as compound assignment)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
6)
Chaque effet valeur de calcul et d'autre du premier (à gauche) argument de la haut-logiques && opérateur AND et le haut-opérateur OR logique
Original:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
7)
Chaque calcul de valeur et des effets secondaires associés à la première expression de la logique:? l'opérateur est séquencé avant chaque calcul de valeur et des effets secondaires associés à l'expression deuxième ou le troisième .
Original:
Every value computation and side effect associated with the first expression in the logical :? operator is sequenced before every value computation and side effect associated with the second or third expression.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
8)
L'effet secondaire (modification de l'argument de gauche) de l'opérateur d'affectation intégrée et de tous les haut-opérateurs d'affectation composés est séquencé après le calcul de la valeur (mais pas les effets secondaires) des arguments à la fois à gauche et à droite, et est séquencé avant le calcul de la valeur de l'expression d'affectation (qui est, avant de retourner la référence à l'objet de modification)
Original:
The side effect (modification of the left argument) of the built-in assignment operator and of all built-in compound assignment operators is sequenced after the value computation (but not the side effects) of both left and right arguments, and is sequenced before the value computation of the assignment expression (that is, before returning the reference to the modified object)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
9)
Chaque calcul de valeur et des effets secondaires de la première (à gauche) argument de l'opérateur virgule intégré est séquencé avant chaque calcul de la valeur et des effets secondaires de la seconde (à droite) l'argument .
Original:
Every value computation and side effect of the first (left) argument of the built-in comma operator is sequenced before every value computation and side effect of the second (right) argument.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
10)
En liste d'initialisation, chaque effet de la valeur de calcul et d'autre d'une clause d'initialisation donnée est séquencé avant chaque calcul de la valeur et des effets secondaires associés à une clause d'initialisation qui le suit dans la liste séparée par des virgules de la liste d'initialisation .
Original:
In liste d'initialisation, every value computation and side effect of a given initializer clause is sequenced before every value computation and side effect associated with any initializer clause that follows it in the comma-separated list of the initializer list.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
11)
Un appel de fonction qui n'est pas séquencé avant ou en séquence après l'autre appel de fonction pour une durée indéterminée est séquencé (le programme doit comporter as if les instructions CPU qui constituent des appels de fonctions différentes sont pas entrelacés, même si les fonctions ont été inline)
Original:
A function call that is not sequenced before or sequenced after another function call is indeterminately sequenced (the program must behave as if the CPU instructions that constitute different function calls were not interleaved, even if the functions were inlined)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
12)
L'appel à la fonction d'allocation (nouvel opérateur) pour une durée indéterminée est séquencé par rapport à l'évaluation des arguments du constructeur dans une nouvelle expression
Original:
The call to the allocation function (operator new) is indeterminately sequenced with respect to the evaluation of the constructor arguments in a new-expression
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[modifier] Un comportement indéfini

1)
Si un effet secondaire sur un objet scalaire est non séquencée par rapport à un autre effet secondaire sur l'objet scalaire même, le comportement est indéfini .
Original:
If a side effect on a scalar object is unsequenced relative to another side effect on the same scalar object, the behavior is undefined.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

i = ++i + i++; // undefined behavior
i = i++ + 1; // undefined behavior (but i = ++i + 1; is well-defined)
f(++i, ++i); // undefined behavior
f(i = -1, i = -1); // undefined behavior

2)
Si un effet secondaire sur un objet scalaire est non séquencée par rapport à un calcul de la valeur en utilisant la valeur de l'objet scalaire même, le comportement est indéfini .
Original:
If a side effect on a scalar object is unsequenced relative to a value computation using the value of the same scalar object, the behavior is undefined.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

cout << i << i++; // undefined behavior
a[i] = i++; // undefined bevahior

[modifier] RulesNJ point de séquence

[modifier] Définitions

L'évaluation d'une expression peut produire des effets secondaires, qui sont: l'accès à un objet désigné par un volatile lvalue, modification d'un objet, appelant une bibliothèque fonction I / O, ou en appelant une fonction qui fait l'une de ces opérations .
Original:
Evaluation of an expression might produce side effects, which are: accessing an object designated by a volatile lvalue, modifying an object, calling a library I/O function, or calling a function that does any of those operations.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Un point séquence est un point dans la séquence d'exécution où tous les effets secondaires des évaluations précédentes de la séquence sont complets, et pas d'effets secondaires des évaluations ultérieures commencé .
Original:
A sequence point is a point in the execution sequence where all side effects from the previous evaluations in the sequence are complete, and no side effects of the subsequent evaluations started.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[modifier] Règles

1)
Il ya un point de séquence à la fin de chaque expression complète (en général, à la virgule)
Original:
There is a sequence point at the end of each full expression (typically, at the semicolon)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
2)
Lorsque vous appelez une fonction (si la fonction est en ligne et si oui ou non la syntaxe d'appel de fonction a été utilisé), il ya un point de séquence après l'évaluation de l'ensemble des arguments de la fonction (le cas échéant) qui a lieu avant l'exécution de toutes les expressions ou des énoncés en le corps de la fonction
Original:
When calling a function (whether or not the function is inline and whether or not function call syntax was used), there is a sequence point after the evaluation of all function arguments (if any) which takes place before execution of any expressions or statements in the function body
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
3)
Il ya un point de séquence après la copie d'une valeur de retour d'une fonction et avant l'exécution de toute expression en dehors de la fonction .
Original:
There is a sequence point after the copying of a returned value of a function and before the execution of any expressions outside the function.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
4)
Une fois que l'exécution d'une fonction commence, aucune expression de la fonction d'appel sont évaluées jusqu'à l'exécution de la fonction appelée est terminée (fonctions ne peuvent pas être imbriquées)
Original:
Once the execution of a function begins, no expressions from the calling function are evaluated until execution of the called function has completed (functions cannot be interleaved)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
5)
Dans l'évaluation de chacune des quatre expressions suivantes, en utilisant les intégrés (non surchargés) les opérateurs, il ya un point de séquence après l'évaluation de l'expression a .
Original:
In the evaluation of each of the following four expressions, using the built-in (non-overloaded) operators, there is a sequence point after the evaluation of the expression a.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

a && b
a || b
a ? b : c
a , b

[modifier] Un comportement indéfini

1)
Entre le point de séquence précédent et suivant un objet scalaire doit posséder une valeur stockée modifié au plus une fois par l'évaluation d'une expression .
Original:
Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

i = ++i + i++; // undefined behavior
i = i++ + 1; // undefined behavior
i = ++i + 1; // undefined behavior (well-defined in C++11)
++ ++i; // undefined behavior (well-defined in C++11)
f(++i, ++i); // undefined behavior
f(i = -1, i = -1); // undefined behavior

2)
Entre le point de séquence précédent et suivant, la valeur antérieure d'un objet scalaire qui est modifié par l'évaluation de l'expression, est accessible seulement à déterminer la valeur à mémoriser .
Original:
Between the previous and next sequence point , the prior value of a scalar object that is modified by the evaluation of the expression, shall be accessed only to determine the value to be stored.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

cout << i << i++; // undefined behavior
a[i] = i++; // undefined bevahior

[modifier] Voir aussi