pour l'expression fonctionnera Func1 () * Func2 () est évalué d'abord comme il comporte des supports ou que les fonctions peuvent être appelées dans n'importe quel ordre comme p> premier Func3 () puis (Func1 () * Func2 ()) P> P>
6 Réponses :
Les fonctions peuvent être appelées dans n'importe quel ordre. P>
Vous ne pouvez faire aucune hypothèse sur l'ordre dans lequel ces fonctions seront appelées. Il est parfaitement valide pour le compilateur d'appeler ces fonctions dans n'importe quel ordre, attribuez les résultats aux temporaires, puis utilisez ces valeurs temporaires pour calculer le résultat de l'expression. P>
Ces appels peuvent être effectués dans n'importe quel ordre. Vous voulez apprendre sur points de séquence C ++ del> points de séquence C ++ . P>
"La définition de langue C ++ ne spécifie pas actuellement des points de séquence". C'est certainement une déclaration amusante.
Droite, besoin de trouver une meilleure référence :) Avez-vous un Johannes?
Qu'en est-il de Stackoverflow.com/questions/4176328/.../ a>
Merci John, je cherchais vraiment un moyen de relier directement au texte standard. Il suffit de remplacer le lien avec une Wikipedia Ref.
Parenthèses dans l'ordre des opérations de la force C / C ++. FUNC1 () * FUNC2 () CODE> sera ajouté à Func3 () CODE>, mais le compilateur peut choisir d'appeler les fonctions dans n'importe quel ordre qu'il souhaite avant de passer aux résultats du Fonctionnement multiplication / addition. P>
La précédente des opérateurs n'a rien à faire avec l'ordre d'évaluation des opérandes.
La norme C ou C ++ ne détermine pas l'ordre dans lequel les fonctions seraient appelées. . P>
L'ordre d'évaluation des sous-expressions, y compris p>
, +, -, =, *, / code>), à l'exception de:
- Les opérateurs logiques binaires (
&& code> et || code>), li>
- L'opérateur conditionnel ternaire (
?: code>), et li>
- L'opérateur de la virgule (
, code>) li>
ul> li>
ul> est non spécifié fort> p> par exemple p> xxx pré> p>
Il est naturel de penser que Mais en fait, ce n'est pas le cas. La norme indique que l'ordre d'évaluation pour toutes les expressions em> est "non spécifié", sauf indication contraire de la norme: p> sauf si noté, l'ordre de
Évaluation des opérandes d'individu
opérateurs et subexpessions de
expressions individuelles et la commande
dans quels effets secondaires ont lieu, est
non spécifié p>
BlockQuote> La norme continue ensuite d'identifier une expression entre parenthèses comme une "expression primaire" mais ne spécifie pas l'ordre d'évaluation des expressions primaires. (5.1 / 5). P> en normal, "non spécifié" ne signifie pas "indéfini". Cela signifie plutôt "la mise en œuvre définie, mais aucune documentation n'est requise." Donc, vous ne pourriez même pas ne pas être capable de dire quelle est l'ordre d'évaluation pour un compilateur spécifique. P> Voici un programme simple illustrant le comportement: p> Sur mon MSVC10 en cours d'exécution à DEBUG / X64 sur Win7, la sortie est: p> A + B code> est évalué avant C code> dans ce psudocode: (A + B) * C CODE> P> 5/4 [EXPR]: H2>