Ordre d'évaluation dans les déclarations d'affectation C
Lors de l'attribution d'une valeur à une carte en C, l'ordre d'évaluation peut conduire à des résultats contre-intuitifs. Considérez le code suivant :
map<int, int> mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[10]);<br>
Ce code imprime 0 puis 1, alors qu'on pourrait s'attendre à 0 et 0. En effet :
Comportement non spécifié
Ce comportement particulier n'est pas spécifié dans la norme C. Cependant, une proposition récente (N4228) cherche à clarifier l'ordre d'évaluation dans de tels cas.
La section [expr.ass]p1 de la proposition révisée indique que :
"L'opérande de droite est séquencé avant l'opérande de gauche. >Mise à jour
Il est important de noter qu'en C 17, ce comportement a été spécifié dans la norme, selon la révision 3 de la proposition p0145. L'opérande de droite est désormais explicitement séquencé avant l'opérande de gauche dans les instructions d'affectation.
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!