Maison >développement back-end >C++ >Pourquoi « i = i 1 ; » est-il désormais légal en C 17 ?
C 17 Légalise i = i 1; En raison de l'ordonnance révisée d'évaluation de l'opérateur
En C 11, l'affectation i = i 1 ; était considéré comme un comportement indéfini. Cependant, dans C 17, cette expression est devenue valable. Pour comprendre ce changement, nous devons nous plonger dans les règles révisées d'évaluation des opérateurs.
Comportement non défini avant C 17
En C 11, le séquençage des évaluations d'opérandes pour les opérateurs d'affectation a été défini comme suit :
Dans i = i 1;, le post-incrémentation i présente des effets secondaires (modifiant la valeur de i), qui pourraient survenir entrelacés avec l'opération d'affectation. Ce potentiel d'effets secondaires non séquencés a conduit à un comportement indéfini.
Règle de séquençage révisée du C 17
C 17 a introduit une nouvelle règle de séquençage pour les opérateurs d'affectation :
Cette règle révisée s'applique à la fois aux calculs de valeur et aux effets secondaires de l'opérande droit.
Légalisation de i = i 1;
Dans i = i 1;, l'opérande de droite est i 1. L'évaluation de cette expression implique l'incrément suffixe de i entre parenthèses, suivi de l'ajout de 1 . Selon la nouvelle règle, toute cette évaluation est séquencée et terminée avant l'affectation à i.
Par conséquent, en C 17, l'acte de modification de i (effet secondaire) est terminé avant l'affectation réelle, éliminant le. risque d’effets secondaires non séquencés. Ce séquençage révisé fait que i = i 1 ; expression légale en C 17.
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!