void main() { vec.resize( 2 ); int a = foobar(); vec[0] = a; }
3 Réponses :
L'ordre d'évaluation serait indéterminé dans ce cas. N'écrivez pas ce code p>
EXEMPLE SIMILAIRE
0 commentaires
L'ordre d'évaluation d'une expression est Vous devez vous abstenir d'écrire des codes shuch. Si la commande compte, alors votre code est faux fort> / non portable strong> / peut donner un résultat différent strong> Accross Différents compilateurs **. p>
Cela dépend du compilateur qui commande qu'elle choisit d'évaluer. P>
Bien que s'il n'y ait pas d'effet secondaire, l'ordre n'aurait pas d'importance. P>
Le concept de C ++ qui régit si l'ordre d'évaluation est défini est appelé point de séquence . P>
Fondamentalement, à un point de séquence, il est garanti que toutes les expressions avant ce point (avec des effets secondaires observables) ont été évaluées et qu'aucune expression dépassant ce point n'a encore été évaluée. P>
Bien que certains puissent le trouver surprenant, l'opérateur d'affectation n'est pas un point de séquence. Une liste complète de tous les points de séquence se trouve dans le Article Wikipedia . P>
... était i> appelé le point de séquence. Depuis cette année, nous utilisons séquencé avant i> / séquencé après i>.
+2, c'est une question intéressante; C'est quelque chose que je n'ai jamais envisagé auparavant. Évidemment, vous avez des problèmes si vous commencez à utiliser le code comme celui de toute façon :)
+1. C'est vraiment une question intéressante; Plus que cela, la question est posée très bien. Une question bien écrite.
Je suis tombé sur un exemple intéressant de cela aujourd'hui:
auto_ptr p (nouveau int); smart_map m; m [1] = p.Release (); code> si vous supposez que
smart_map :: opérateur [] code> peut lancer, vous pouvez avoir un cas où le
auto_ptr code> libère sa propriété, mais la carte n'assume jamais la propriété, dans le cas où le RHS est évalué avant le LHS. (Supposons
smart_map code> est comme une carte STL
code>, sauf qu'il supprime la valeur du pointeur de chaque paire de clé / valeur sur la destruction.)