Maison > développement back-end > C++ > Pourquoi « i = i 1 ; » est-il désormais légal en C 17 ?

Pourquoi « i = i 1 ; » est-il désormais légal en C 17 ?

Barbara Streisand
Libérer: 2024-11-01 06:38:01
original
777 Les gens l'ont consulté

Why is `i = i     1;` now legal in 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 :

  • Les calculs de valeurs des opérandes ont été séquencés avant l'opération d'affectation.
  • Les effets secondaires sur une variable scalaire n'étaient pas séquencés par rapport aux deux autres effets secondaires et calculs de valeurs.

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 :

  • L'opérande droit est séquencé avant l'opérande gauche.

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!

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