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
714 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!

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