Maison  >  Article  >  développement back-end  >  Comment l’ordre d’évaluation dans les instructions d’affectation C affecte-t-il le résultat ?

Comment l’ordre d’évaluation dans les instructions d’affectation C affecte-t-il le résultat ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 12:36:02140parcourir

How Does the Order of Evaluation in C   Assignment Statements Affect the Output?

Ordre d'évaluation dans les déclarations d'affectation en C

Dans l'extrait de code donné :

map< int, int> mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[10]);<br>

le résultat apparemment contre-intuitif de "0 1" découle de l'ordre non spécifié d'évaluation des sous-expressions dans les affectations.

Conformément à la norme C , l'ordre d'évaluation dans les instructions d'affectation n'est pas défini. Cependant, le comportement est le suivant :

  1. Le côté droit de l'affectation (dans ce cas, mp.size()) est évalué d'abord.
  2. Le côté gauche de l'affectation (mp[10]) est modifié pour référencer la valeur sous-jacente renvoyée par le côté droit.
  3. Le côté gauche évalue ensuite à nouveau sa valeur pour l'utiliser dans l'affectation.

Par conséquent, dans l'extrait de code, mp.size() est évalué à 0 et attribué à mp[10]. Ensuite, mp[10] est à nouveau évalué, qui renvoie désormais la valeur qui lui a été attribuée (1).

Bien qu'il ne soit pas spécifié dans la norme C actuelle, ce comportement a été abordé dans une proposition récente ( N4228) :

N4228 propose d'affiner l'ordre des règles d'évaluation pour le rendre bien défini pour certains cas, dont celui ci-dessus. Selon la proposition, l'opérande droit d'une affectation est séquencé avant l'opérande gauche.

Cela signifie qu'en C 17 et au-delà, le comportement de l'extrait de code sera probablement bien défini et entraînera un sortie de "1 1."

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn