Maison > développement back-end > C++ > 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
Libérer: 2024-10-29 12:36:02
original
192 Les gens l'ont consulté

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal