Maison > Article > développement back-end > Comment C évalue-t-il les opérandes droit et gauche dans les instructions d'affectation ?
Ordre d'évaluation dans les instructions d'affectation en C
Lors de l'attribution d'une valeur à un élément de carte, tel que mp[10] = mp. size(), l’ordre d’évaluation de l’expression devient crucial. Cette expression particulière donne un résultat inattendu de « 0 1 », ce qui soulève des questions sur l'ordre d'évaluation spécifié en C .
La norme C précise que l'ordre d'évaluation n'est pas spécifié pour certaines opérations, telles que les appels de fonction. Cependant, les opérateurs d'affectation comme = sont séquencés après les évaluations des opérandes droit et gauche, laissant un espace dans l'ordre spécifié. Cette ambiguïté a conduit à la nécessité d'une proposition affinée.
La récente proposition de normes C (N4228) cherche à résoudre ce problème en spécifiant l'ordre d'évaluation pour certains cas. Selon N4228, cette expression d'affectation spécifique relève de la catégorie des comportements non spécifiés, où les deux évaluations d'opérandes ne sont pas séquencées.
Selon la version révisée de N4228 (P0145R0), ce comportement est désormais spécifié. La section révisée [expr.ass] indique que l'opérande droit d'un opérateur d'affectation est séquencé avant l'opérande gauche. Par conséquent, dans l'expression donnée, mp.size() serait évalué en premier, suivi de l'affectation du résultat à mp[10]. La norme C 17 mise à jour devrait clarifier cet ordre d'évaluation.
En résumé, l'ordre d'évaluation des énoncés d'affectation reste non précisé dans certains cas, mais la dernière proposition de norme C (N4228) vise à affiner ces règles. La spécification actuellement acceptée, P0145R3, précise que l'opérande droit d'une affectation est évalué avant l'opérande gauche, résolvant ainsi l'ambiguïté dans l'expression donnée.
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!